calloc
配置記憶體中項目初始化為 0 的陣列。
語法
void *calloc(
size_t number,
size_t size
);
參數
number
項目數。
size
每個項目的長度 (位元組)。
傳回值
calloc
傳回所配置空間的指標。 傳回值所指向的儲存空間會適當對齊,以儲存任何類型的物件。 若要取得 void
以外之類型的指標,請對傳回值使用類型轉換。
備註
calloc
函式會配置 number
項目陣列的儲存空間,而且每個長度都是 size
個位元組。 每個元素都會初始化為 0。
如果記憶體配置失敗,或所要求的記憶體數量超過 _HEAP_MAXREQ
,calloc
會將 errno
設為 ENOMEM
。 如您需要此錯誤碼和其他錯誤碼的相關資訊,請參閱errno
、 _doserrno
_sys_errlist
與 _sys_nerr
。
在Microsoft實作中,如果 number
或 size
為零, calloc
則會傳回非零大小的已配置區塊指標。 嘗試透過傳回的指標讀取或寫入會導致未定義的行為。
calloc
會使用 C++ 函式 _set_new_mode
來設定 新的處理程式模式。 新的處理常式模式表示失敗時,calloc
是否呼叫 _set_new_handler
所設定的新處理常式。 根據預設, calloc
不會在無法配置記憶體時呼叫新的處理程式例程。 您可以覆寫此預設行為,如此一來,當記憶體配置失敗時 calloc
,它會呼叫新的處理程式例程,就像運算符因相同原因而失敗時所執行的一樣 new
。 若要覆寫預設值,請及早在程式中呼叫
_set_new_mode(1);
在您的程式早期,或連結至 NEWMODE.OBJ
(請參閱 連結選項)。
當應用程式與 C 執行時間連結庫的偵錯版本連結時, calloc
會解析為 _calloc_dbg
。 如需如何在偵錯程式期間管理堆積的詳細資訊,請參閱 CRT偵錯堆積。
calloc
標示 __declspec(noalias)
為 和 __declspec(restrict)
,這表示保證函式不會修改全域變數,而且傳回的指標不會有別名。 如需詳細資訊,請參閱 noalias
和 restrict
。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
需求
常式 | 必要的標頭 |
---|---|
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 );
}
Allocated 40 long integers