C calloc函数

calloc会在分配的同时清空内存。该函数的原型如下:

void *calloc(size_t numElements, size_t elementSize);

注意 清空内存的意思是将其内容置为二进制0。

calloc函数会根据numElementselementSize两个参数的乘积来分配内存,并返回一个指向内存的第一个字节的指针。如果不能分配内存,则会返回NULL。此函数最初用来辅助分配数组内存。

如果numElementselementSize为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分配的内存。

赞(1)

评论 抢沙发

评论前必须登录!

 

C指针