malloc と calloc によるメモリ割当て
C 言語では値を保持する場合は、何らかの形でメモリーを確保する必要があります。
メモリを割り当てるには、malloc 関数があります。
malloc 関数 の使い方を見てみましょう。
malloc 関数と calloc 関数の違い
次の例では 4 バイト分のメモリを割り当てて、そのメモリ領域に順番に 'a', 'b', 'c', 0 という風に値を書き込んでいます。
#include <stdio.h>
#include <stdlib.h>
void main() {
char *p = NULL;
p = (char*) malloc(4);
if (!p) {
return;
}
p[0] = 'a';
p[1] = 'b';
p[2] = 'c';
p[3] = 0;
printf("%s\n", p);
free(p);
return;
}
メモリを使い終わったら、free 関数でその領域を解放します。
ちなみに、ここでは「char のサイズが 1 バイトなので 1 文字 1 バイトで書き込める」ということを前提として操作していることに注意してください。
「char のサイズで 4 文字書き込めるサイズのメモリを割り当てよう」という意図をハッキリコードに書くならば、malloc の引数は次のように記述するべきです。
p = (char*) malloc(sizeof(char) * 4);
変数1個分のサイズと、その個数を引数に受け取るメモリ割当関数は calloc です。
calloc を利用すると、上と同様のことは次のようにかけます。
#include <stdio.h>
#include <stdlib.h>
void main() {
char *p = NULL;
p = (char*) calloc(4, sizeof(char));
if (!p) {
return;
}
p[0] = 'a';
p[1] = 'b';
p[2] = 'c';
p[3] = 0;
printf("%s\n", p);
free(p);
return;
}