簡體   English   中英

釋放C中的結構內存

[英]Freeing the memory of structure in C

我有以下創建鏈表的結構,如何釋放分配的內存?

typedef struct linked_list {
    struct linkedl_ist *number;
    POINTER           house;
} list;


typedef  list  *LIST;  
typedef void pointer

我有以下清單

LIST l1;
l1 = some_function(pointer);

這些l1是使用一些變量構造的。 正如我提到的,這是一個鏈表數據結構。 如何釋放為l1分配的內存?

[編輯]

l1擁有8個字節的內存。

l1不需要釋放。 它在堆棧上。 從您使用的函數中返回,它將自動消失。 釋放l1指向的內容的方法與釋放列表的其余元素的方法相同:遍歷列表(使用->number ),然后隨便釋放每個元素。

LIST node = l1;
LIST next;
while (node != NULL)
{
    next = node->number;
    free(node);
    node = next;
}

您必須單獨釋放內存指針。 這里並沒有真正的魔術,您必須遍歷鏈表並釋放每個節點的指針,然后,如果鏈表本身是動態分配的,則必須釋放它。

以正確的順序釋放內容很重要,這樣您就不會以懸空的指針結尾。 換句話說,如果指針p指向另一個指針p2,則需要確保先釋放p2,然后釋放p。 您不希望在釋放p2之前先釋放p,因為當您嘗試釋放p2時,您正在經過一個懸空指針來執行該操作(例如free(p-> p2),但p已被釋放)。

我認為您應該手動釋放列表中的每個元素,從l1開始,然后是l1-> number等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM