calloc
配置在記憶體中陣列的元素初始化為 0。
void *calloc(
size_t num,
size_t size
);
參數
num
項目數。size
每個項目的位元組長度。
傳回值
calloc 將指標傳回這個配置的空間。 傳回值指向的儲存空間保證可以儲存任何型別的物件的適當地對齊物件的任何型別。 若要得到 void 之外的型別指標,請在傳回值上使用型別轉換。
備註
calloc 函式會配置 num 項目的陣列 ,每個儲存空間 size 的長度 (以位元組為單位)。 每個元素初始化為 0。
如果記憶體配置失敗,或是要求的記憶體數量超過 _HEAP_MAXREQ,則 calloc 會將 errno 設定為 ENOMEM。 如需有關這個錯誤碼及其他錯誤碼的詳細資訊,請參閱 errno、_doserrno、_sys_errlist 和 _sys_nerr。
calloc 會呼叫 malloc 以使用 C++ _set_new_mode 函來設定新的處理常式模式。 新的處理常式模式表示,失敗時,malloc 是否要呼叫由 _set_new_handler 設定的新處理常式。 根據預設, malloc 不會在無法配置記憶體時呼叫新的處理常式。 您可以覆寫這個預設行為,因此,當 calloc 無法配置記憶體時,malloc 會以 new 運算子因相同原因失敗時所執行的相同方式,呼叫新處理常式。 若要覆寫預設值,請呼叫
_set_new_mode(1)
及早在您的程式中呼叫,或與 NEWMODE.OBJ 連結 (請參閱連結選項)。
當應用程式使用 C 執行期程式庫偵錯版本連結時,calloc 會解析為 _calloc_dbg。 如需堆積在偵錯過程中的運作,請參閱 The CRT Debug Heap 。
calloc 會標示 __declspec(noalias) 及 __declspec(restrict),這表示函式保證不會修改全域變數且傳回的指標不會產生別名。 如需詳細資訊,請參閱 noalias 和 restrict。
需求
常式 |
必要的標頭 |
---|---|
calloc |
<stdlib.h> 和 <malloc.h> |
如需其他相容性資訊,請參閱<簡介>中的相容性。
範例
// crt_calloc.c
// This program uses calloc to allocate space for
// 40 long integers. It initializes each element to zero.
#include <stdio.h>
#include <malloc.h>
int main( void )
{
long *buffer;
buffer = (long *)calloc( 40, sizeof( long ) );
if( buffer != NULL )
printf( "Allocated 40 long integers\n" );
else
printf( "Can't allocate memory\n" );
free( buffer );
}
.NET Framework 對等用法
不適用。若要呼叫標準 C 函式,請使用 PInvoke。如需詳細資訊,請參閱平台叫用範例。