我在C程序中使用双向链表。我对释放记忆感到困惑。
答案 0 :(得分:8)
您必须遍历列表并释放每个节点。如果你只将head和tail指针设置为NULL,那么列表节点仍然在堆中,你没有指向它们的指针,这是一个典型的内存泄漏。
这是一些伪代码:
Node* current = head;
while( current != NULL ) {
Node* next = current->Next;
free( current );
current = next;
}
// done
你当然可以从头到尾遍历 - 没有任何重大差异。
答案 1 :(得分:7)
如果动态分配它们,则需要释放节点。请记住,如果您的节点持有指向某些数据的指针,并且该数据也是动态分配的,那么您也需要释放它。
类似的东西:
list_node* node = head;
while (node)
{
/* depends */
/* free(node->data); */
list_node* next = node->next;
free(node);
node = next;
}
答案 2 :(得分:4)
您必须释放每个节点。如果只是将head和tail节点设置为NULL,则会泄漏为列表分配的所有内存。