2013-03-28 3 views
0

У меня есть связанный_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->next в переменную темп типа node*, то не delete first, чтобы исправить это:

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

так просто переверните он должен это делать? – user1665569

+0

Не совсем/flipping/it –

+0

@ user1665569 Вам также нужен временный указатель на следующий элемент, иначе он будет потерян навсегда, когда вы удалите 'first' – nullpotent

2

изменение

linked_list::~linked_list(void) 
{ 
struct node *next; 
while (first != NULL) 
{ 
    next = first->next; 
    delete first; 
    first = next; 
} 
} 
Смежные вопросы