yaotti's diary

Software is Eating the World

この2つの違い

char tmp1[10];
char *tmp2 = malloc(10);
  • tmp1は長さMAXNUM(cは1つ1バイトなのでMAXNUMバイト)の配列
  • tmp2はMAXNUMバイトの領域を指すポインタ
printf("%d\n", sizeof(tmp1));
printf("%d\n", sizeof(*tmp2));

結果は前者は10、後者は1。
tmp2はまだ領域を確保しているだけなので、char1つ分しかサイズがない。


ここまではok。
で、エラーを出すつもりで
tmp2[100] = 10;
とやってみた。


エラーが出ない。あれ?
char *tmp2 = malloc(10);
って「char型10個分のメモリ確保するよ」って意味だよな…
for使ってみたら100個格納できてるし。


うーん。。。
まだ理解が足りない様子。