?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
在頭文件<stdlib.h>中定義 | ||
---|---|---|
void * calloc(size_t num,size_t size); |
為具有num
大小的對(duì)象數(shù)組分配內(nèi)存size
,并將分配的存儲(chǔ)中的所有字節(jié)初始化為零。
如果分配成功,則返回一個(gè)指向已分配內(nèi)存塊中適用于任何對(duì)象類型的最低(第一個(gè))字節(jié)的指針。
如果size
為零,則行為是實(shí)現(xiàn)定義的(可能會(huì)返回空指針,或者可能會(huì)返回一些可能不用于訪問(wèn)存儲(chǔ)的非空指針)。
calloc是線程安全的:它的行為就好像只訪問(wèn)通過(guò)其參數(shù)可見的內(nèi)存位置,而不是任何靜態(tài)存儲(chǔ)。先前調(diào)用free或realloc來(lái)釋放內(nèi)存區(qū)域的同步 - 調(diào)用calloc來(lái)分配同一區(qū)域或同一區(qū)域內(nèi)存的一部分。在通過(guò)解除分配函數(shù)訪問(wèn)內(nèi)存之后和通過(guò)calloc訪問(wèn)內(nèi)存之前,會(huì)發(fā)生此同步。所有分配和解除分配功能在內(nèi)存的每個(gè)特定區(qū)域都有一個(gè)總的順序。 | (自C11以來(lái)) |
---|
在一個(gè) | - | 對(duì)象的數(shù)量 |
---|---|---|
尺寸 | - | 每個(gè)對(duì)象的大小 |
成功時(shí),將指針?lè)祷氐叫路峙涞膬?nèi)存的開始位置。返回的指針必須用free()
或來(lái)解除分配realloc()
。
失敗時(shí),返回一個(gè)空指針。
由于對(duì)齊要求,分配的字節(jié)數(shù)不一定等于num*size
。
初始化所有位為零并不保證浮點(diǎn)或指針將分別初始化為0.0和空指針值(盡管在所有常見平臺(tái)上都是如此)。
最初(在C89中),增加了對(duì)零大小的支持以適應(yīng)如下代碼。
OBJ *p = calloc(0, sizeof(OBJ)); // "zero-length" placeholder...while(1) { p = realloc(p, c * sizeof(OBJ)); // reallocations until size settles ... // code that may change c or break out of loop}
#include <stdio.h>#include <stdlib.h> int main(void){ int *p1 = calloc(4, sizeof(int)); // allocate and zero out an array of 4 int int *p2 = calloc(1, sizeof(int[4])); // same, naming the array type directly int *p3 = calloc(4, sizeof *p3); // same, without repeating the type name if(p2) { for(int n=0; n<4; ++n) // print the array printf("p2[%d] == %d\n", n, p2[n]); } free(p1); free(p2); free(p3);}
輸出:
p2[0] == 0p2[1] == 0p2[2] == 0p2[3] == 0
C11標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.22.3.2 calloc函數(shù)(p:348)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.20.3.1 calloc函數(shù)(p:313)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.10.3.1 calloc函數(shù)