2013-03-28 103 views
0

我有一個linked_list,目前我的析構函數無法正常工作。不完全確定原因。 有人可以解釋我如何解決這個問題嗎?析構函數的鏈表

class linked_list { 
private: 

struct node 
{ 
    // String in this node 
    std::string data; 

    // Pointer to next node 
    struct node *next; 
}; 

//First item in the list 
struct node *first; 

這裏是我的析構函數

linked_list::~linked_list(void) 
{ 
while (first) 
{ 
    delete first; 
    first = first->next; 
} 
} 

回答

9

的問題就在這裏:

delete first; 
first = first->next; 

當你刪除first,但隨後嘗試訪問first->next。緩存first->nextnode*類型的臨時變量,然後做delete first解決這個問題:

struct node* temp; 
while (first != NULL) 
{ 
    temp = first->next; 
    delete first; 
    first = temp; 
} 
+0

所以只需扳動它應該做的呢? – user1665569 2013-03-28 01:49:17

+0

不完全/翻轉/它 – 2013-03-28 01:50:33

+0

@ user1665569您還需要一個臨時指針指向下一個元素,否則在刪除'first'時會永久丟失它。 – nullpotent 2013-03-28 01:52:08

2

變化

linked_list::~linked_list(void) 
{ 
struct node *next; 
while (first != NULL) 
{ 
    next = first->next; 
    delete first; 
    first = next; 
} 
}