calloc

分配内存中数组与初始化的元素为 0。

void *calloc( 
   size_t num,
   size_t size 
);

参数

  • num
    元素的数目

  • size
    每个元素字节长度。

返回值

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

备注

calloc 函数分配数组的 num 元素,每个存储区长度 size 字节。 每个元素初始化为 0。

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

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

_set_new_mode(1)

在您程序的早期,或链接到 NEWMODE.OBJ(请参阅 链接选项)。

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

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

要求

例程

必需的标头

calloc

<stdlib.h> 和 <malloc.h>

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

示例

// crt_calloc.c
// This program uses calloc to allocate space for
// 40 long integers. It initializes each element to zero.
 
#include <stdio.h>
#include <malloc.h>

int main( void )
{
   long *buffer;

   buffer = (long *)calloc( 40, sizeof( long ) );
   if( buffer != NULL )
      printf( "Allocated 40 long integers\n" );
   else
      printf( "Can't allocate memory\n" );
   free( buffer );
}
  

.NET Framework 等效项

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

请参见

参考

内存分配

free

malloc

realloc