2009-12-11 130 views
1

我在C程序中使用雙向鏈表。我對釋放內存感到困惑。免費的雙向鏈表

  1. 我應該釋放列表節點嗎?
  2. 或者,通過將首尾節點分配給NULL?
+0

請管好你的拼寫和格式。這個網站比「普通論壇」在這方面更爲嚴肅和苛刻。 – AttishOculus 2009-12-11 07:09:07

+2

另外,其他用戶會經常停下來並更正拼寫和格式。 :) – 2009-12-11 07:11:48

回答

4

你必須釋放每個節點。如果您只將頭節點和尾節點設置爲NULL,則會泄漏爲該列表分配的所有內存。

8

您必須遍歷列表並釋放每個節點。如果您只將頭指針和尾指針設置爲NULL,則列表節點仍然在堆中,並且您沒有指向它們的指針,這是一個典型的內存泄漏。

下面是一些僞代碼:

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

你可以爲尾部頭當然遍歷的 - 沒有任何主要的區別。

7

如果它們是動態分配的,則需要釋放這些節點。請記住,如果您的節點持有指向某些數據的指針,並且該數據也是動態分配的,則您也需要釋放該數據。

喜歡的東西:

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

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