繁体   English   中英

没有双向链表

[英]free of doubly linked list

我在C程序中使用双向链表。 我对释放内存感到困惑。

  1. 我应该逐个释放列表节点吗?
  2. 还是通过将头和尾节点分配为NULL?

您必须遍历列表并释放每个节点。 如果仅将头和尾指针设置为NULL,则列表节点仍在堆中,并且没有指向它们的指针,这是经典的内存泄漏。

这是一些伪代码:

Node* current = head;
while( current != NULL ) {
   Node* next = current->Next;
   free( current );
   current = next;
}
// done

您当然可以从头到尾遍历-没什么大不同。

如果它们是动态分配的,则需要释放节点。 请记住,如果您的节点持有指向某些数据的指针,并且该数据也是动态分配的,那么您也需要释放它们。

就像是:

list_node* node = head;
while (node)
{
    /* depends */
    /* free(node->data); */

    list_node* next = node->next;
    free(node);
    node = next;
}

您必须释放每个节点。 如果仅将头节点和尾节点设置为NULL,则将泄漏为该列表分配的所有内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM