Linux-realloc()之后调用free()出现故障
做了一个例题,发现realloc()之后再free()变出现故障,但是本身空间的分配应该没问题,因为我调用这个函数之后,发现确实是插入成功了,函数的返回值也都是正确的,可唯独下面多了这样一段,,,,
代码如下:
bool ListInsert(List *list,int i,ElemType e)
{
ElemType *new_elem;
int q=0;
if(i<0||i>(list->length+1))
return false;
if(list->length>=LIST_SIZE)
{
//空间已满,重新分配
new_elem=(ElemType *)realloc(list->elem,(LIST_SIZE+1)*sizeof(ElemType));
if(!new_elem)
exit(-1);
list->elem=new_elem;
list->listsize++;
}
for(q=list->length;q>=i;q--)
(list->elem)[q+1]=(list->elem)[q];
(list->elem)[i]=e;
list->length++;
printf("the length is after is %dn",list->length);
free(new_elem);
return true;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你这里为什么要有这个 free(new_elem); ?
1). 空间没满, 没重新分配. 那么new_elem是野指针, free肯定出问题.
2). 空间满了, 重新分配. 这里new_elem指向list->elem. 怎么也不该在ListInsert方法里去free吧, free后你的list里的元素不就没了么.
...这是链表么 明明是想实现可变数组
没满的情况下也会free ...