2013-03-19 100 views
0

當我遍歷一個鏈表時,它表示seg錯誤。我無法弄清楚爲什麼它這樣做。我的任務是RECURSIVELY(所有函數)按順序插入整數,創建一個函數來檢查整數,打印列表,打印列表向後,刪除節點並刪除整個列表。我在最後一部分,現在已經停留了一段時間。非常感謝。刪除鏈表時刪除錯誤C

void deleteList(node* head) 
{ 
    node* temp; 

    if(head == NULL) 
     printf("List is empty\n"); 

    else 
    { 
     temp = head->next; 
     free(head); 
    } 

    deleteList(head->next); 
} 

回答

4

您首先釋放頭部使用的內存,然後將頭部成員作爲參數傳遞給「deleteList」。

我覺得應該是先deleteList然後免費:

if (head) 
{ 
    deleteList(head->next); 
    free(head); 
} 
+0

是啊...調用'頭戴式> next'永遠不會起作用,因爲頭要麼空,也可以將已經通過'那點free'd。 – ApproachingDarknessFish 2013-03-19 05:25:10

+0

我原本是這樣的,但它一直在輸出垃圾,這就是爲什麼我認爲這是錯誤的。感謝您的回答。 – juice 2013-03-19 07:10:53

2

問問你自己你爲什麼要存儲變量temp。它看起來並不像你曾經用過它的任何東西。

我想你意味着使用它,你可能應該使用它。

1

你free'd頭了,所以當你做

deleteList(head->next); 

你所訪問無效的內存,使用您的臨時變量。

deleteList(temp); 
0

應該

temp=head; 
    head=head->next; 
    free(temp); 
    deleteList(head);