0

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

2 回答 2

3

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

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

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

于 2012-06-08T05:09:09.193 回答
0

你有一个编码错误......你需要: 替补检查你的代码!

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

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

于 2012-06-08T05:22:45.907 回答