void free_memory(struct container_list *p)
{
struct container_list *tmp_cl;
struct box_list *tmp_bl1;
struct box_list *tmp_bl2;
int count_container;
int count_box;
// tmp_cl1=p;
// tmp_cl2=p;
count_container=0;
count_box=0;
tmp_cl=p;
tmp_bl1=p->bl;
while (p!=NULL)
{
while (tmp_bl1!=NULL)
{
tmp_bl2=tmp_bl1->next_b;
free(tmp_bl1);
count_box++;
tmp_bl1=tmp_bl2;
}
tmp_cl=p->next_c;
free(p);
count_container++;
p=tmp_cl;
}
}
二维链表倒入函数的是头节点的地址,两个链表的构造是:
struct box_list
{
char fit_type[4];
int box_size;
struct box_list *next_b;
};
struct container_list
{
int container_size;
int container_current_size;
struct container_list *next_c;
struct box_list *bl;
};
报错是
free(): invalid pointer: 0xbfffdae8 *** Aborted
释放内存那块儿应该怎么改?
有木有大神帮帮忙 谢谢谢谢
C语言释放内存的问题,求求大神帮我一下
答案:2 悬赏:60 手机版
解决时间 2021-02-28 18:17
- 提问者网友:蓝琪梦莎
- 2021-02-28 12:56
最佳答案
- 五星知识达人网友:鸠书
- 2021-02-28 14:17
失败原因估计是下面两种情况:
一、指针未初始化就free失败
也就是一个指针没有成功执行malloc分配,就直接free肯定会失败,因为该指针还未经过初始化。
二、指针申请后被修改再free会失败
可能从申请到最后释放跨域多个模块、大量的处理代码逻辑,指针初始值被修改掉,也就是说分配的这段内存的“门牌号”被改掉了,那么free就会失败。
一、指针未初始化就free失败
也就是一个指针没有成功执行malloc分配,就直接free肯定会失败,因为该指针还未经过初始化。
二、指针申请后被修改再free会失败
可能从申请到最后释放跨域多个模块、大量的处理代码逻辑,指针初始值被修改掉,也就是说分配的这段内存的“门牌号”被改掉了,那么free就会失败。
全部回答
- 1楼网友:封刀令
- 2021-02-28 14:31
百度百科查一下printf()函数的格式说明,有详解
%d 输出int类型数据
%p 按地址格式(16进制)输出数据
%s 输出字符串
%i 同%d 老式写法
%li 同%ld 老式写法
%lu 输出unsigned long类型数据
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯