今天遇到了这个问题,查了很多资料,
有的说“内存释放两次引起的”,这个单单从英文的字面意思我也知道是连续释放内存引起的,可是检查了我的程序哪里有释放两次内存的?排除!
有的说是“字符串拷贝”引起的,我的程序只有在打印的时候才用到字符串拷贝,把所有的打印信息都屏蔽了,依然会出现上述情况,排除!
最后终于发现问题的所在,我的函数!!!
原来是这样的:
function_cb(.......)
{
p_list newpp = new struct list;
while(...)
{
newpp->.. = .. ;
newpp->.. = .. ;
newpp->.. = .. ;
newpp->next = p_head;
p_head = newpp;
}
newpp->.. = .. ;
newpp->.. = .. ;
newpp->next = p_head;
p_head = newpp;
return 0;
}
评语:我在while循环里多次用到结构体链表但是就申请了一次空间,显然是空间不够,所以每次用之前就应该申请了,正确的程序如下:
function_cb(.......)
{
while(...)
{
p_list newpp = new struct list;
newpp->.. = .. ;
newpp->.. = .. ;
newpp->.. = .. ;
newpp->next = p_head;
p_head = newpp;
}
p_list newpp = new struct list;
newpp->.. = .. ;
newpp->.. = .. ;
newpp->next = p_head;
p_head = newpp;
return 0;
}
阅读(10131) | 评论(0) | 转发(0) |