Linux-realloc()之后调用free()出现故障

发布于 2017-08-08 19:34:55 字数 894 浏览 1223 评论 2

做了一个例题,发现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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜柠檬 2017-10-03 17:10:24

你这里为什么要有这个 free(new_elem); ?
1). 空间没满, 没重新分配. 那么new_elem是野指针, free肯定出问题.
2). 空间满了, 重新分配. 这里new_elem指向list->elem. 怎么也不该在ListInsert方法里去free吧, free后你的list里的元素不就没了么.

甜柠檬 2017-09-10 08:15:36

...这是链表么 明明是想实现可变数组

没满的情况下也会free ...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文