c++ - 递归删除一个链表,使用new分配内存

标签 c++ linked-list

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/

相关文章:

c - 如何将新项目插入到C中的链接列表中(在列表末尾)

c++ - 关于C++内联函数的几个问题

c++ - Linux/Qt - 创建 SSL 上下文时出错(错误 : 140A90C4 . ..)

C 链接列表 - 理解,如何删除列表中的相同元素

c++ - 使用没有逻辑的删除

c - 链表无法正确循环

c++ - 重定向打开的 TCP 连接

c++ - C++应该使用哪个类?

c++ - 嵌套类作为模板参数

c - 在链表程序中维护 'curr'(列表末尾)指针是个好主意吗?