0
我試圖使用以下代碼刪除C中單鏈表的所有節點。無法刪除單個鏈接列表的最後一個剩餘節點的數據
void free_all(struct cd *head){
struct cd *tmp;
tmp = head->next;
while(tmp != NULL){
head->next = tmp->next;
free(tmp);
tmp = head->next;
}
free(head->next);
free(head);
head=NULL;
}
但是,如果之後我打印鏈表的所有元素以檢查列表是否爲空,則始終打印「head」元素。所以它看起來像head元素沒有被正確刪除。怎麼了?
爲什麼變量仍然指向列表的頭部?我該如何解決這個問題。 – nazco
爲了回答這個問題,我已經擴展了我的答案,但基本上因爲您沒有真正更改變量,您只是更改了本地副本。一旦函數返回,那個本地副本就消失了,原來的東西仍然存在。 – JasonD
好吧,現在我明白你的意思,它的工作原理。但是因爲我知道head是一個指針,所以它是「通過引用調用」,這意味着只給函數一個參考,並且沒有本地副本,或者我錯了嗎? – nazco