双链表清单析构函数

时间:2015-04-07 05:12:54

标签: c++ visual-studio-2012

我正在开发一个使用双链表但我的析构函数导致错误的程序。我不确定为什么会这样,所以解释会很好,也可能是解决方案的可能步骤。

~GroceryList()
    {
        ItemType *before=head, *current=head, *after=head;
        for(int i=0; i<itemCount; i++)
        {
            before=current;
            current=current->next;
            after=current->next;
            before->next=after;
            after->prev=before;
            delete current;
        }
        current=before=after=NULL;
    };

2 个答案:

答案 0 :(得分:1)

首先,你应该显示错误消息。
我认为下面的行正在制造问题。

for(int i=0; i<itemCount; i++)
        {
    before=current;     //  this one 
    current=current->next;
    after=current->next;
    before->next=after;
    after->prev=before;
    delete current;     // here you are deleting and again using `current` in first statement in loop?
}

答案 1 :(得分:0)

你有一个逻辑错误。

for(int i=0; i<itemCount; i++)
{
    before=current;
    current=current->next; 
    after=current->next;
    before->next=after;
    after->prev=before;

    // Add some statements to print the conents of
    // before, current, and after here to debug
    // the memory problem.

    delete current;
    current = after;  // Add this line.
}