如何正确破坏链表?

时间:2012-06-08 05:03:22

标签: c++ linked-list destructor

对于类赋值,我需要为我创建的链表的对象实现析构函数。我创建了一个名为MakeEmpty的函数,我在析构函数中调用它。它第一次正确编译,但现在我收到了一个错误的错误:

  

表达式:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)

有人可以帮我弄清楚出了什么问题吗?我运行了调试器并指出错误在代码中的位置。

WORD::~WORD()
{
cout << "Destructor Called"<<endl;

(*this).MakeEmpty();
}

这是MakeEmpty()函数

void WORD::MakeEmpty()
{
alpha_numeric *p = (*this).front;

if((*this).IsEmpty())
{
    cout <<"Already empty"<< endl;
    return;
}

while(front != 0)
{
    front = front -> next;
    delete p;//<<<<---DEBUGGER SAYS ERROR HERE
    p = front;
}
return;
}

2 个答案:

答案 0 :(得分:3)

由于这是一个家庭作业,我不打算给出解决方案,而是提示。

while(front != 0)
{
    front = front -> next;
    delete p;//<<<<---DEBUGGER SAYS ERROR HERE
    p = front;
}

在此期间,您在列表中的哪个位置开始/结束删除?为什么?

答案 1 :(得分:0)

您遇到编码错误......您需要:检查您的代码!

在每个语句和循环的每次迭代中记下所有变量的预期值。不要跳过任何步骤。这将使您的编码错误显而易见。

30年后,我在脑海中这样做..但我总是这样做,以确保我写的是正确的。这一习惯将在未来几年为你提供良好的服务。