[英]Valgrind reports a memory error when trying to free a malloc'ed struct
[英]Error when trying to free a previous malloc
我正在使用一個函數,該函數從用戶分配給定數量的字節,然后我有另一個函數應該釋放分配的內存。 內存段用作包含x個大小相等的列表節點的池。
初始功能:
void create_mem(int mem_size, int num_n){
number_of_nodes = num_n;
mem_block = malloc(mem_size);
header = mem_block;
}
頭文件具有number_of_nodes,頭和mem_block作為int,分別具有list_node *和char *。
我在頭文件中也有一個list_node結構:
typedef struct list_node {
list_node* next;
}list_node;
刪除功能:
void delete_mem(){
free(mem_block);
}
該列表有效,我的代碼包含可以正常工作的insert_nodes和delete_nodes,但是每當我的主要調用delete_mem函數時,我的程序就會崩潰。
當我將delete_mem函數更改為:
void delete_mem(){
mem_block = NULL;
free(mem_block);
}
我沒有收到任何錯誤,但是我不認為此刪除功能實際上可以實現我想要的功能。
我相信在嘗試釋放內存之前,我需要刪除原始mem_block內的所有內容,但是我不確定該怎么做。
你倒退了 首先將該變量NULL
意味着您泄漏了內存,然后free(NULL)
。 free(NULL)
是合法的,但是它是一個空操作; 由於您丟失了指針的跟蹤,現在修復泄漏已經太遲了。 采用:
void delete_mem(){
free(mem_block);
mem_block = NULL;
}
先free
,然后NULL
出。
我不知道mem_block
可能有什么,但是如果它包含指向其他已分配內存的指針,則需要對它“擁有”的任何指針進行深度優先遍歷,從而free
外部的“葉子”在備份“四肢”之前,請不要free
內存,直到存儲在其中的所有指針都已free
為止。
確保在malloc之后變量mem_block的值沒有改變。
如果更改,則調用free(mem_block);
會有麻煩
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.