删除循环列表中的节点时崩溃
Crash when deleting nodes in a circular list
我在循环列表中"清除"节点的算法中遇到了一些问题:大多数时候程序会崩溃,有时不会。我很确定算法是好的,我不知道解决方案……: - (
下面是一些代码:
clear()
函数(注:mFreenode
是循环表的"正反无"节点):
List* clear() {
if (mFreenode->getNext() != 0) {
Node<T>* current = mFreenode->getNext();
Node<T>* temp = 0;
while (current != mFreenode) {
temp = current->getNext();
delete current;
current = temp;
}
}
mFreenode->setNext(0);
mFreenode->setPrev(0);
mSize = 0;
return this;
}
这是Node
析构函数:
~Node() {
delete &item;
}
任何建议吗?
你的析构函数看起来很可疑——我假设item
是Node
的成员变量。如果item
是一个值类型(例如int
或std::string
),那么你根本不应该删除它。如果它是一个指针,那么也许你应该做delete item;
——但只有当节点拥有它有指针指向的项的所有权时。
当您执行delete item;
时,您不会使前一个节点指向您删除的节点之后的节点。因此,在您删除的节点之前的节点不指向任何地方。
对于循环链表,请不要这样做:
while (current != mFreenode) {
temp = current->getNext();
delete current;
current = temp;
}
为什么你认为它是一个循环链表??因为尾节点指向第一个节点,所以当您这样做时,循环将继续并删除除当前节点之前的节点之外的所有节点。然后你尝试访问它坏主意:
mFreenode->setNext(0);
mFreenode->setPrev(0);
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 程序崩溃并显示"std::out_of_range"错误
- 如何找到2个单链表的公共节点
- omnet++ 模拟在节点关闭时崩溃
- 在C++中实现二叉搜索树,搜索不起作用.尝试打印节点的元素会导致输出崩溃
- C++ :过滤节点值时崩溃
- 尝试将节点添加到链表时程序崩溃
- 尝试将元素添加到现有节点时程序崩溃
- 尝试将节点插入矢量<node>,但程序在push_back时不断崩溃
- c++删除节点链表导致程序崩溃
- 查找节点崩溃的函数
- 我的单链表中的一个函数(在找到特定节点后添加新节点)使我的程序崩溃
- 删除循环列表中的节点时崩溃
- 当我试图在远程Linux节点上更改Eclipse中的设置时,X服务器崩溃了