_recalloc

realloccalloc 的组合。 重新分配内存中的数组并将其元素初始化为 0。

语法

void *_recalloc(
   void *memblock
   size_t num,
   size_t size
);

参数

memblock
指向之前已分配内存块的指针。

number
元素数量。

size
每个元素的长度(以字节为单位)。

返回值

_recalloc 将返回指向重新分配的(并且可能已移动的)内存块的 void 指针。

如果没有足够可用的内存将块扩展到给定大小,则原始块将保持不变,并返回 NULL

如果请求的大小为零,则释放由 memblock 指向的块;返回值为 NULL,而 memblock 仍指向已释放的块。

返回值将指向适当对齐任何类型的对象的存储的存储空间。 若要获取指向类型而非 void 的指针,请在返回值中使用类型转换。

注解

_recalloc 函数更改已分配内存块的大小。 memblock 参数指向内存块的开头。 如果 memblockNULL,则 _recalloccalloc 的行为相同,并分配一个 number * size 字节的新块。 将每个元素初始化为 0。 如果 memblock 不为 NULL,则它应是指向以前调用 callocmallocrealloc 所返回的指针。

因为新块可以在新的内存位置,所以由 __recalloc 返回的指针并非一定是指向通过 memblock 参数传递的指针。

如果内存分配失败或请求的内存量超过 _HEAP_MAXREQ,则 _recallocerrno 设置为 ENOMEM。 有关此错误代码和其他错误代码的信息,请参阅 errno_doserrno_sys_errlist_sys_nerr

recalloc 调用 realloc 以使用 C++ _set_new_mode 函数设置新的处理程序模式。 新的处理程序模式将指示 realloc 是否在失败时调用由 _set_new_handler 设置的新处理程序例程。 默认情况下,realloc 在失败时不调用新的处理程序例程来分配内存。 可以替代此默认行为,以便在 _recalloc 无法分配内存时,realloc 将以 new 运算符由于相同原因失败时的同一方法调用新的处理程序例程。 若要替代默认值,请在程序的早期调用:

_set_new_mode(1);

或链接到 NEWMODE.OBJ。

当应用程序与调试版的 C 运行时库链接时,_recalloc 将解析为 _recalloc_dbg。 有关在调试过程中如何托管堆的详细信息,请参阅 CRT 调试堆

_recalloc 被标记为 __declspec(noalias)__declspec(restrict),也就是说确保该函数不能修改全局变量,并且指针返回不使用别名。 有关详细信息,请参阅 noaliasrestrict

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

要求

例程 必需的标头
_recalloc <stdlib.h> 和 <malloc.h>

有关兼容性的详细信息,请参阅 兼容性

另请参阅

内存分配
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
链接选项