_recalloc
realloc
和 calloc
的组合。 重新分配内存中的数组并将其元素初始化为 0。
语法
void *_recalloc(
void *memblock
size_t num,
size_t size
);
参数
memblock
指向之前已分配内存块的指针。
number
元素数量。
size
每个元素的长度(以字节为单位)。
返回值
_recalloc
将返回指向重新分配的(并且可能已移动的)内存块的 void
指针。
如果没有足够可用的内存将块扩展到给定大小,则原始块将保持不变,并返回 NULL
。
如果请求的大小为零,则释放由 memblock
指向的块;返回值为 NULL
,而 memblock
仍指向已释放的块。
返回值将指向适当对齐任何类型的对象的存储的存储空间。 若要获取指向类型而非 void
的指针,请在返回值中使用类型转换。
注解
_recalloc
函数更改已分配内存块的大小。 memblock
参数指向内存块的开头。 如果 memblock
为 NULL
,则 _recalloc
与 calloc
的行为相同,并分配一个 number
* size
字节的新块。 将每个元素初始化为 0。 如果 memblock
不为 NULL
,则它应是指向以前调用 calloc
、malloc
或 realloc
所返回的指针。
因为新块可以在新的内存位置,所以由 __recalloc
返回的指针并非一定是指向通过 memblock
参数传递的指针。
如果内存分配失败或请求的内存量超过 _HEAP_MAXREQ
,则 _recalloc
将 errno
设置为 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)
,也就是说确保该函数不能修改全局变量,并且指针返回不使用别名。 有关详细信息,请参阅 noalias
和 restrict
。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
例程 | 必需的标头 |
---|---|
_recalloc |
<stdlib.h> 和 <malloc.h> |
有关兼容性的详细信息,请参阅 兼容性。
另请参阅
内存分配
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
链接选项