calloc

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

void *calloc( 
   size_t num,
   size_t size 
);

参数

  • num
    元素的数目。

  • size
    字节长度每个元素。

返回值

calloc 返回指向该分配空间。存储空间指向返回值以确保为任何类型的对象存储正确对齐。获取对一个类型的指针 void除了之外,将使用一个返回值的类型转换。

备注

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

calloc 设置 errno 到 ENOMEM ,如果内存分配失败,或如果内存请求的数据量超过 _HEAP_MAXREQ。有关此更改和其他错误代码的信息,请参见 errno、_doserrno、_sys_errlist和_sys_nerr

calloc 调用 malloc 使用 C++ _set_new_mode 功能将新的处理程序模式。新的处理程序模式指示,在失败时, malloc 是否调用新的处理程序实例由设置由 _set_new_handler。默认情况下, malloc 不调用在发生故障的新处理程序实例分配内存。可以重写此默认行为,以便,那么,当 calloc 不能分配内存时, malloc 类似的方式调用新的处理程序实例 new 运算符,则它的原因相同失败。若要重写默认值,请调用

_set_new_mode(1)

早期程序或指向与 NEWMODE.OBJ (请参见 LINK选项)。

当应用程序使用 C 运行库时的调试版本链接, calloc 解析为 _calloc_dbg。有关堆方式的更多信息管理在调试过程中,请参见 CRT 调试堆

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

要求

实例

必需的头

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