2017/08/13

C言語 calloc 動的メモリ

自分で作る場合は大抵mallocを使っているのだが、人の書いたコードを見ると、たまにcallocが使われている。 その違いは初期化するかしないかというところ。ただサイズの書き方が若干違うので、注意が必要。

mallocとcallocの違い

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
 int fileSize = 5;
 float *buff;
 int i;
  
 buff = (float*)malloc(sizeof(float) * fileSize);
 if (buff == NULL) exit(1);
 for(i=0; i<fileSize; i++){
  printf("malloc %d: %f\n",i,buff[i]);
 }
 free(buff); 
  
 buff = (float*)calloc(fileSize,sizeof(float));
 if (buff == NULL) exit(1);
 for(i=0; i<fileSize; i++){
  printf("calloc %d: %f\n",i,buff[i]);
 }
 free(buff); 
 
 return 0;
}

上記を実行すると以下のようになり、mallocはメモリ内は何もいじらないが、callocは0に初期化されているのが確認できる。
malloc 0: 0.000000
malloc 1: 0.000000
malloc 2: 14970027419140777000000000.000000
malloc 3: 274039735486251010.000000
malloc 4: 284056841118906580000.000000
calloc 0: 0.000000
calloc 1: 0.000000
calloc 2: 0.000000
calloc 3: 0.000000
calloc 4: 0.000000


C言語 ANSI C89 Meadow & MinGW GCC 目次はこちら