永发信息网

C语言释放内存的问题,求求大神帮我一下

答案:2  悬赏:60  手机版
解决时间 2021-02-28 18:17
  • 提问者网友:蓝琪梦莎
  • 2021-02-28 12:56
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
释放内存那块儿应该怎么改?
有木有大神帮帮忙 谢谢谢谢
最佳答案
  • 五星知识达人网友:鸠书
  • 2021-02-28 14:17
失败原因估计是下面两种情况:
一、指针未初始化就free失败
也就是一个指针没有成功执行malloc分配,就直接free肯定会失败,因为该指针还未经过初始化。
二、指针申请后被修改再free会失败
可能从申请到最后释放跨域多个模块、大量的处理代码逻辑,指针初始值被修改掉,也就是说分配的这段内存的“门牌号”被改掉了,那么free就会失败。
全部回答
  • 1楼网友:封刀令
  • 2021-02-28 14:31
百度百科查一下printf()函数的格式说明,有详解 %d 输出int类型数据 %p 按地址格式(16进制)输出数据 %s 输出字符串 %i 同%d 老式写法 %li 同%ld 老式写法 %lu 输出unsigned long类型数据
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯