【发布时间】:2017-06-30 10:58:43
【问题描述】:
以下程序用于从已排序的单链表中删除重复项。该代码在在线 IDE 中给出了垃圾值。但是当我评论这行时。
delete curr;
该程序在在线 IDE 本身中运行良好。这是我写的函数。代码的其他部分由在线法官明确定义(不是我)。
而且没有注释行 delete curr; 的代码在本地 IDE(代码块)中也可以正常工作。
为什么我会得到垃圾值?
Node *removeDuplicates(Node *root)
{
// your code goes here
struct Node* curr = root,*prev = NULL;
while(curr)
{
if(prev==NULL)
prev = curr;
else if(curr->data!=prev->data)
prev = curr;
else
{
prev->next = curr->next;
delete curr;
curr = prev->next;
}
}
return root;
}
编辑: 可以看到位置被删除的指针立即重新分配。因此这里不可能有一个悬空指针!
【问题讨论】:
-
你试过在调试器下运行它吗?
-
你做用
new分配你的Node实例? 全部?他们的析构函数在做什么? -
这是 C (
struct Node* curr) 和 C++ (delete curr) 代码的完美结合。你确定调用者是C++,调用operator new分配实例? -
一旦它必须通过 else if 块就会进入无限循环 - 你确定这是你的实际代码
-
@TomTanner:我不看场外资源。关于 SO 的问题应该是独立的。这在有关如何生成 minimal reproducible example 的说明中进行了说明。
标签: c++ pointers linked-list garbage