尝试释放以前的malloc时出错
我正在使用一个函数,从用户那里分配给定数量的字节,然后我有另一个函数,应该释放分配的内存。内存段用作包含x个大小相等的列表节点的池 初始功能:尝试释放以前的malloc时出错,c,C,我正在使用一个函数,从用户那里分配给定数量的字节,然后我有另一个函数,应该释放分配的内存。内存段用作包含x个大小相等的列表节点的池 初始功能: void create_mem(int mem_size, int num_n){ number_of_nodes = num_n; mem_block = malloc(mem_size); header = mem_block; } void delete_mem(){ free(mem_block); }
void create_mem(int mem_size, int num_n){
number_of_nodes = num_n;
mem_block = malloc(mem_size);
header = mem_block;
}
void delete_mem(){
free(mem_block);
}
头文件包含多个节点,头和mem块分别作为int、list和char
头文件中还有一个列表节点结构:
typedef struct list_node {
list_node* next;
}list_node;
删除功能:
void create_mem(int mem_size, int num_n){
number_of_nodes = num_n;
mem_block = malloc(mem_size);
header = mem_block;
}
void delete_mem(){
free(mem_block);
}
该列表工作正常,我的代码包含insert_节点和delete_节点,它们工作正常,但每当main调用delete_mem函数时,我的程序就会崩溃
当我将delete_mem函数更改为:
void delete_mem(){
mem_block = NULL;
free(mem_block);
}
我没有得到任何错误,但我不认为这个删除函数实际上做了我希望它做的事情
我相信在释放内存之前,我需要删除原始mem_块中的所有内容,但我不确定如何执行该操作。确保变量mem_块的值在malloc之后不会更改
如果更改,调用
free(mem_块)代码>将出现故障确保变量mem_块的值在malloc之后不会更改
如果更改,调用free(mem_块)代码>将遇到麻烦您是反向操作的NULL
首先调用变量意味着泄漏内存,然后释放(NULL)
<代码>免费(空)
是合法的,但它是不可操作的;现在修复漏洞已经太晚了,因为你找不到指针了。使用:
void delete_mem(){
free(mem_block);
mem_block = NULL;
}
先释放free
,然后退出NULL
我不知道mem_block
中可能有什么,但如果它包含指向其他已分配内存的指针,您需要对它“拥有”的任何指针进行深度优先遍历,释放
外部“叶子”,然后再返回“四肢”,因此,在存储在内存中的所有指针都被释放之前,您不会释放内存。您是反向操作的NULL
首先调用变量意味着泄漏内存,然后释放(NULL)
<代码>免费(空)
是合法的,但它是不可操作的;现在修复漏洞已经太晚了,因为你找不到指针了。使用:
void delete_mem(){
free(mem_block);
mem_block = NULL;
}
先释放free
,然后退出NULL
我不知道mem_block
中可能有什么,但如果它包含指向其他已分配内存的指针,您需要对它“拥有”的任何指针进行深度优先遍历,释放
外部“叶子”,然后再返回“四肢”,因此,在存储在内存中的所有指针也被释放之前,您不会释放内存。没有足够的信息。显然,如果你分配mem_block=NULL
,那么随后的free()
就相当于free(NULL)
,它什么也不做。最好的猜测是:你在(其他地方)给mem_block
分配了一个新值,因此当你试图释放它时,它的值不再是从malloc()收到的值
。下一个猜测:您多次尝试释放内存。信息不足。显然,如果你分配mem_block=NULL
,那么随后的free()
就相当于free(NULL)
,它什么也不做。最好的猜测是:你在(其他地方)给mem_block
分配了一个新值,因此当你试图释放它时,它的值不再是从malloc()收到的值
。下一个猜测:您尝试多次释放内存。