mallocで構造体のサイズを確保する場合
malloc()の挙動について
malloc()はどんな環境でも常に同じ挙動ではなくて、コンパイラやOSによって動き方が違います。
そもそもmalloc()って?
malloc()はメモリを確保する関数です。返り値はvoid*なので、構造体に適用したい場合は、
構造体へのポインタへのキャストが必要です。
aaa = (struct aaa *) malloc(sizeof(struct aaa *));
上記の処理では、 構造体aaaへのポインタのサイズ分のメモリを確保しており、
仮に構造体分のメモリが必要になったとき、はみ出した部分への参照となり、メモリ破壊を起こします。よって、構造体のサイズ分割り当てたい場合はsizeofの引数にポインタを入れないようにします。
参考サイト