如何正确销毁链表
How to correctly destruct linked-list?
对于类赋值,我需要为我创建的链接列表的对象实现一个析构函数。 我创建了一个名为 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年后,我在脑海中这样做......但我总是这样做以确保我写的东西是正确的。 这个习惯将在未来几年为你服务。
相关文章:
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- C++:我的链表尾巴没有改变?我似乎无法让节点正确指向彼此?
- 这是在传递 int num 时创建搜索函数的正确方法吗?使用链表库
- 双向链表未正确打印值
- 尝试使用递归和指针到指针反转链表,但反转函数没有给出预期的正确输出
- 这是在双链表的第一个节点之后插入节点的正确方法吗?
- 如何正确打印带有人名的链表
- 如何在C++中正确删除链表的节点
- 将节点正确插入链表C++中
- 找到插入循环双链表的正确位置
- 如何正确销毁链表
- 返回链表的正确迭代器类型
- 正确实现链表的复制构造函数
- 我的常量和非常量链表迭代程序有何不同
- 从链表中删除节点的方法不正确
- 关于在链表开头插入节点(程序未正确执行)
- 链表冒泡排序并不完全正确
- 链表不能正确打印
- 这是递归删除链表的正确方法吗?
- C++11在双链表中正确使用智能指针