函式
<cstdlib>

calloc

void* calloc (size_t num, size_t size);
分配並零初始化陣列
分配一個記憶體塊,用於存放 num 個元素,每個元素的大小為 size 位元組,並將其所有位初始化為零。

有效結果是分配一個大小為 (num*size) 位元組的零初始化記憶體塊。

如果 size 為零,返回值取決於具體的庫實現(它可能是一個也可能不是一個空指標),但返回的指標不得被解引用。

引數

num
要分配的元素數量。
size
每個元素的大小。

size_t 是一個無符號整數型別。

返回值

成功時,返回指向函式分配的記憶體塊的指標。
此指標的型別始終為 void*,可以轉換為所需的資料指標型別以便解引用。
如果函式未能分配所需的記憶體塊,則返回空指標

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* 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;
}

此程式僅儲存數字然後列印它們。但它儲存的專案的數量可以隨著程式的每次執行而適應,因為它在執行時分配了所需的記憶體。

資料競爭

只有返回指標所引用的儲存才會被修改。呼叫不會訪問任何其他儲存位置。
如果函式重用了由釋放函式(如 freerealloc)釋放的同一儲存單元,則這些函式會同步進行,以便在下一次分配之前完全完成釋放。

異常 (C++)

無異常保證:此函式從不丟擲異常。

另見