c-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-内存仍然被分配且未受干扰,但您覆盖了对它的唯一引用。

Alwaysrealloc的结果分配给临时指针变量,并在更新目标指针和大小之前检查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调用失败的原因。但至少这样你才能恢复。

相关内容

  • 没有找到相关文章

最新更新