C言語でのmalloc凡ミス
構造体をmallocしてfreeしてたらなんかしらんけどエラーでた.
ソースコード
typedef struct _item{ char *key; //このkeyをfreeするとエラー char *value; struct _item *next; struct _item *pre; } item; int main(){ item *it = (item *)malloc(sizeof(item *)); it->key = strdup("key"); it->value = strdup("value"); it->next = NULL; it->pre = NULL; printf("start\n"); free(it->key); printf("free:key\n"); free(it->value); printf("free:value\n"); free(it); }
実行結果
*** Error in `./a.out': free(): invalid pointer: 0x0000000000ee8030 ***
この下にBacktraceとMemory mapが続く.でもみてもわかんない.
keyのfreeは出来ないが,なぜかvalueはfreeできる.構造体it自体もfreeすると同じエラーがでる.(構造体自体をfreeするとメンバ(key)も自動的にfreeされるため?)
原因
main()で最初に行うnextとpreの初期化を消したら普通に実行できた.
解決策にはなってないけど,現状ではこうするしかない.
わからない.
と,思ったけど普通に構造体のmallocが間違ってる.
main()の最初を
item *it = (item *)malloc(sizeof(item));
このように変更すればいい.超恥ずかしい.
戒めとして残す.