tixture55’s diary

主にプログラミング関係の日記です。

mallocで構造体のサイズを確保する場合

malloc()の挙動について

malloc()はどんな環境でも常に同じ挙動ではなくて、コンパイラやOSによって動き方が違います。

そもそもmalloc()って?

malloc()はメモリを確保する関数です。返り値はvoid*なので、構造体に適用したい場合は、

構造体へのポインタへのキャストが必要です。

 

aaa = (struct aaa *) malloc(sizeof(struct aaa *)); 

上記の処理では、 構造体aaaへのポインタのサイズ分のメモリを確保しており、

仮に構造体分のメモリが必要になったとき、はみ出した部分への参照となり、メモリ破壊を起こします。よって、構造体のサイズ分割り当てたい場合はsizeofの引数にポインタを入れないようにします。

 

参考サイト

C言語のバグ回避をするための習慣 - Qiita