構造体のfree
構造体のポインタを宣言して、そこにmallocしてメモリを割り当てたとします。
そして構造体の要素にもポインタがある場合、そこにもmallocしてメモリを割り当てたとします。
これらをfreeしたいときは、構造体のポインタだけfreeするのでは不十分です。構造体の要素のポインタもfreeする必要があります。
例えば、
struct hash {
char *name;
char *defn;
};struct hash *hp;
hp = ( struct hash*) malloc( sizeof( *hp));
hp->name = strdup( "name");
hp->defn = strdup( "defn");
のようにmallocとstrdupでメモリを確保したとします。こういうときは、
free( hp);
だけではmallocされた全てのメモリがfreeされません。
free( np->name);
free( np->defn);
free( np);
としないといけません。
まぁmallocの仕組みを考えたら当たり前なのですが、思わずfree(hp);だけで済ませちゃおうと思っちゃいますよね!?ボクはそう思ってしまいました。。。