calloc
会在分配的同时清空内存。该函数的原型如下:
void *calloc(size_t numElements, size_t elementSize);
注意 清空内存的意思是将其内容置为二进制0。
calloc函数会根据numElements
和elementSize
两个参数的乘积来分配内存,并返回一个指向内存的第一个字节的指针。如果不能分配内存,则会返回NULL
。此函数最初用来辅助分配数组内存。
如果numElements
或elementSize
为0,那么calloc
可能返回空指针。如果calloc
无法分配内存就会返回空指针,而且全局变量errno
会设置为ENOMEM
(内存不足),这是POSIX错误码,有的系统上可能没有。
下例为pi
分配了20字节,全部包含0:
int *pi = calloc(5,sizeof(int));
不用calloc
的话,用malloc
函数和memset
函数可以得到同样的结果,如下所示:
int *pi = malloc(5 * sizeof(int));
memset(pi, 0, 5* sizeof(int));
注意
memset
函数会用某个值填充内存块。第一个参数是指向要填充的缓冲区的指针,第二个参数是填充缓冲区的值,最后一个参数是要填充的字节数。
如果内存需要清零可以使用calloc
,不过执行calloc
可能比执行malloc
慢。
注意
cfree
函数已经没用了。早期的C用cfree
来释放calloc
分配的内存。
评论前必须登录!
注册