calloc
函数 <cstdlib>
void* calloc (size_t num, size_t size);
分配和零初始化数组
为num个元素数组分配一块内存,每个元素为size字节,并将其所有位初始化为零。
实际的结果是分配一个零初始化的(num*size)字节的内存块。
如果size为0,返回值取决于特定的库实现(它可能是空指针,也可能不是空指针),但返回的指针不能解引用。
☲ 参数
num
要分配的元素数量。
size
每个元素的大小。
size_t是一个无符号整型。
☉ 返回值
成功时,一个指向函数分配的内存块的指针。
这个指针的类型总是void*,它可以被强制转换为所需的数据指针类型以实现解引用。
如果函数未能分配请求的内存块,则返回一个空指针。
☣ 示例
/* calloc example */
#include <stdio.h> /* printf, scanf, NULL */
#include <stdlib.h> /* calloc, exit, free */
int main ()
{
int i,n;
int * pData;
printf ("Amount of numbers to be entered: ");
scanf ("%d",&i);
pData = (int*) calloc (i,sizeof(int));
if (pData==NULL) exit (1);
for (n=0;n<i;n++)
{
printf ("Enter number #%d: ",n+1);
scanf ("%d",&pData[n]);
}
printf ("You have entered: ");
for (n=0;n<i;n++) printf ("%d ",pData[n]);
free (pData);
return 0;
}
|
这个程序只是存储数字,然后打印出来。但是它存储的项的数量可以在程序每次执行时调整,因为它在运行时分配所需的内存。
↭ 数据竞争
只有返回的指针引用的存储被修改。调用不会访问其他存储位置。
如果函数需要使用由释放函数( deallocation function)(例如
free
或
realloc)释放的内存单元,那么将以这样一种方式同步函数:
即释放完成才可以进行下一次分配。
❆ 异常(c++)
无抛出保证:此函数从不抛出异常。
🍄 另请参阅