假設我在C以下實現鏈表:解除分配節點鏈表
List *create_node(int v) {
List *node = malloc(sizeof(List));
free(node);
node->value = v;
node->next = NULL;
return node;
}
List *add_node(List *h, int v) {
List *node = create_node(v);
node->next = h;
return node;
}
,我想取消分配列表中的所有節點;我嘗試寫函數
List *remove_list(List *h) {
while(h != NULL) {
List *x;
x = h;
h = h->next;
free(x);
}
free(x);
}
但它不工作。你如何取消分配鏈表中的所有節點?
OMG !!這是什麼:'List * node = malloc(sizeof(List)); free(node); node-> value = v;' –
'free'當你不再*需要時,而不是當你*做*時。不知道那些多餘的'free()'來自哪裏,但可能只是一個錯誤或複製粘貼問題。在'create_node'中丟失'free()'。剩下的看起來不錯,除了你的remove_list中的'free(x)'外,它甚至沒有編譯的機會,更別說導致任何問題了。 – WhozCraig
編譯時出現這個錯誤:/usr/lib/gcc/i686-pc-cygwin/4.3.4/../../../libcygwin.a(libcmain.o):(.text+0xa9):未定義參考'_WinMain @ 16' collect2:ld返回1退出狀態 –