calloc
使用初始化为 0 的元素分配内存中的数组。
语法
void *calloc(
size_t number,
size_t size
);
参数
number
元素数量。
size
每个元素的长度(以字节为单位)。
返回值
calloc
返回指向已分配空间的指针。 返回值指向的存储空间与任何类型的对象的存储适当对齐。 若要获取指向类型而非 void
的指针,请在返回值中使用类型转换。
备注
calloc
函数为 number
元素的数组分配存储空间,每个长度为 size
字节。 将每个元素初始化为 0。
如果内存分配失败或请求的内存量超过 _HEAP_MAXREQ
,calloc
会将 errno
设置为 ENOMEM
。 有关此错误代码和其他错误代码的信息,请参阅 errno
、_doserrno
、_sys_errlist
和 _sys_nerr
。
在 Microsoft 实现中,如果 number
或 size
为零,则 calloc
返回指向非零大小的已分配块的指针。 尝试通过返回的指针读取或写入会导致未定义的行为。
calloc
使用 C++ _set_new_mode
函数设置新的处理程序模式。 新的处理程序模式将指示 calloc
是否在失败时调用由 _set_new_handler
设置的新处理程序例程。 默认情况下,calloc
在失败时不调用新的处理程序例程来分配内存。 可以替代此默认行为,以便在 calloc
无法分配内存时,它可以调用新的处理程序例程,方法与 new
运算符出于相同原因无法分配内存时所执行的操作一样。 若要替代默认值,请在程序的早期调用:
_set_new_mode(1);
或链接到 NEWMODE.OBJ
(请参阅链接选项)。
当应用程序与调试版的 C 运行时库链接时,calloc
将解析为 _calloc_dbg
。 有关在调试过程中如何托管堆的详细信息,请参阅 CRT 调试堆。
calloc
被标记为 __declspec(noalias)
和 __declspec(restrict)
,也就是说确保该函数不能修改全局变量,并且指针返回不使用别名。 有关详细信息,请参阅 noalias
和 restrict
。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
例程 | 必需的标头 |
---|---|
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 );
}
Allocated 40 long integers