_recalloc

realloc 和 calloc 的组合。 分配内存中数组并初始化其元素为 0。

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

参数

  • memblock
    以前分配的内存块的指针。

  • num
    元素的数目

  • size
    每个元素字节长度。

返回值

_recalloc 返回一void指针用来重分配的 (可能移动)内存块。

如果不展开块的足够的可用内存的特定范围,则块仍保持不变,并且,则返回 NULL。

如果需求的尺寸为0,由memblock指向的块被释放,返回值为NULL,memblock指向一个被释放的块。

返回值指向保证适当地存储任何类型的对象的对齐的存储空间。 若要获得指向类型的指针而不是 void,请对返回值进行类型转换。

备注

recalloc 功能将一个分配的存储区的大小。 memblock 指向存储区的开头的参数的位置。 如果 memblock 是 NULL,_recalloc 相同的行为。calloc 并分配 num * size 字节新块。 每个元素初始化为 0。 如果 memblock 不是 NULL,它应该是对的上一调用返回的指针为 calloc、mallocrealloc

由于新块可以在新的内存位置,_返回的指针recalloc 不一定是指针传递 memblock 参数。

如果内存分配失败,或者请求的内存数量超过 _HEAP_MAXREQ,那么 _recalloc 设置 errno 为 ENOMEM。 有关这和其他错误代码的信息,请参阅 errno、_doserrno、_sys_errlist 和 _sys_nerr

recalloc 调用 realloc 以使用 _set_new_mode C++ 函数将新处理程序模式。 新的处理程序模式指示,在失败时,realloc 是否就像 _set_new_handler 设置的那样调用新的处理程序实例。 默认情况下,realloc 不调用发生故障的新处理程序例程去分配内存。 您可重写此默认行为,这样一来,当 recalloc 无法分配内存时, realloc 调用新的处理程序例程,其方式与出于相同原因的 new 运算符的操作相同。 重写默认值、调用

_set_new_mode(1)

在您程序的早期,或链接到 NEWMODE.OBJ。

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

_recalloc 标记为 __declspec(noalias) 和 __declspec(restrict)这意味着函数保证不修改全局变量,和返回的指针不用做别名。 有关更多信息,请参见 没有别名限制

要求

例程

必需的标头

_recalloc

<stdlib.h> 和 <malloc.h>

有关其他兼容性信息,请参见“简介”中的兼容性

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见平台调用示例

请参见

参考

内存分配

_recalloc_dbg

_aligned_recalloc

_aligned_offset_recalloc

free

概念

链接选项