微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Realloc 使动态数组 NULL

如何解决Realloc 使动态数组 NULL

所以首先我从 365/366 个插槽的 calloc 开始,然后我在那里放了一整年,然后我的想法是当用户进入不同的年份时,它会重新分配更多的内存并在动态中进入新的一年数组,问题是当我尝试重新分配数组时,它不起作用并将整个数组NULL 有人知道这是什么原因吗?

这是我正在使用的代码行:

int old_size = est->agenda[i].sized,newsize = old_size + 365;
est->agenda[i].d = (CALENDER_DAY*) realloc(est->agenda[i].d,newsize * sizeof(CALENDER_DAY));
est->agenda[i].sized = newsize;

解决方法

realloc 在无法满足请求时返回 NULL - 内存仍然分配且未受干扰,但您覆盖了对它的唯一引用。

总是realloc 的结果分配给一个临时指针变量,并在更新目标指针和大小之前检查 NULL

/**
 * DON'T cast the result of malloc,calloc,or realloc in C.  It's unnecessary
 * and in older versions could suppress a useful diagnostic. 
 *
 * sizeof *tmp == sizeof (CALENDAR_DAY) - it's a little easier to read and maintain.
 */
CALENDAR_DAY *tmp = realloc( est->agenda[i].d,(oldsize + 365) * sizeof *tmp ); 
if ( tmp )
{
  est->agenda[i].d = tmp;
  oldsize = oldsize + 365;
}
else
{
  // realloc could not satisfy the request,handle as appropriate
}

这样您就不会丢失对已分配内存的引用。

不幸的是,如果发生故障,realloc 不需要设置 errno,因此可能很难排除realloc 调用失败的原因 .但至少这样你可以恢复。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。