簡體   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