我遇到了在實現單向鏈表時看起來很奇怪的問題。我調用list_destroyer並將指針傳遞給列表的頭部,但是當方法返回時,傳遞的指針仍指向完整列表。我不相信我已經在任何地方傳遞了一個結構體。釋放c中單獨鏈接的列表
這裏是我的結構列表,typedef的
typedef struct list list_t
struct list{
void* datum;
list_t* next;
};
這裏就是導致問題
void list_destroy(list_t *head){
list_t *destroy = head;
while(head){
//printf("%d \n", list_size(head));
head = head->next;
free(destroy);
destroy = head;
}
//printf("%d \n", list_size(head));
head = NULL;
//printf("%d \n", list_size(head));
}
的list_size功能已被註釋掉了,因爲他們是沒有必要的代碼,但我使用它們來查看代碼的輸出。 printf輸出顯示大小正在減小。兩個printf圍繞着「head = NULL;」語句都打印一個零大小。這也可以通過gdb來確認。然而,當我有這個代碼(下面)調用list_destroy時,傳遞的指針是不變的。
int main(){
list_t *test = NULL;
int a = 1;
int b = 2;
list_append(test,&a);
list_append(test,&b);
printf("%d \n", list_size(test));
list_destroy(test);
printf("%d \n", list_size(test));
}
我仍然得到printf的上方和list_destroy到兩個輸出2.我沒有任何地方初始化的新list_t下面,所以我不明白怎麼list_destroy後的printf將仍然輸出2,(尤其是當list_destroy內的printf說*傳入的list_t具有在最後一個大小爲0。
,我不知道這是一個充分的解釋(我沒有看過你的代碼詳細)但釋放內存不會覆蓋它。 –