Home C&C++函数库 c++ 语法 程序源码 Linux C库

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)(例如freerealloc)释放的内存单元,那么将以这样一种方式同步函数: 即释放完成才可以进行下一次分配。

❆  异常(c++)



无抛出保证:此函数从不抛出异常。

🍄  另请参阅



free 释放内存块(function )
malloc 分配内存块(function)
realloc 重新分配内存块(function)

联系我们 免责声明 关于CandCplus 网站地图