如何正确销毁链表

How to correctly destruct linked-list?

本文关键字:链表 何正确      更新时间:2023-10-16

对于类赋值,我需要为我创建的链接列表的对象实现一个析构函数。 我创建了一个名为 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;
}

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

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

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

您有一个编码错误... 你需要:板凳检查你的代码!

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

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