void DeleteList(node** Head)
{
if(*Head==NULL)
return;
node* current=*Head;
delete[] current;
current=NULL;
DeleteList(&((*Head)->next));
}
程序因段错误而崩溃。
最佳答案
在delete[] current
之前,您需要将(*Head)->next
复制到另一个变量中。否则,您将尝试访问已删除节点中的 next
。
void DeleteList(node** Head)
{
if(*Head==NULL) {
return;
}
node* current=*Head;
node* tail = current->next;
delete current;
DeleteList(&tail);
}
此外,我怀疑您是否应该使用 delete[]
。 current
可能只是一个节点,而不是节点数组。而且不需要设置 current = NULL
;这是一个局部变量,它会在函数结束时消失,之后您再也不会使用它,所以它包含什么并不重要。
另一种解决方案是简单地将 DeleteList(&((*Head)->next));
移动到 delete current;
之前。
我也不确定为什么要使用指向指针的指针来调用此函数。当您想修改调用者的指针时,通常会这样做。但你永远不会在这里这样做。但也许您这样做是为了与链表库的其余部分保持一致,这没关系。
关于c++ - 递归删除一个链表,使用new分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27613012/