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;
}