![](/img/trans.png)
[英]Will freeing a structure pointer also free the memory allocated inside of the structure in 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.