簡體   English   中英

嘗試釋放先前的malloc時出錯

[英]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.

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