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;
}
}
4

3 に答える 3

9

問題はここにあります:

delete first;
first = first->next;

削除するときはfirst、アクセスしてみてくださいfirst->nextfirst->nexttype の一時変数にキャッシュしてからnode*delete firstこれを修正します。

struct node* temp;
while (first != NULL)
{
    temp = first->next;
    delete first;
    first = temp;
}
于 2013-03-28T01:48:10.380 に答える
2

への変更

 linked_list::~linked_list(void)
{
struct node *next;
while (first != NULL)
{
    next = first->next;
    delete first;
    first = next;
}
 }
于 2013-03-28T01:51:39.867 に答える