calloc

配置記憶體中項目初始化為 0 的陣列。

語法

void *calloc(
   size_t number,
   size_t size
);

參數

number
項目數。

size
每個項目的長度 (位元組)。

傳回值

calloc 傳回所配置空間的指標。 傳回值所指向的儲存空間會適當對齊,以儲存任何類型的物件。 若要取得 void 以外之類型的指標,請對傳回值使用類型轉換。

備註

calloc 函式會配置 number 項目陣列的儲存空間,而且每個長度都是 size 個位元組。 每個元素都會初始化為 0。

如果記憶體配置失敗,或所要求的記憶體數量超過 _HEAP_MAXREQcalloc 會將 errno 設為 ENOMEM。 如需此錯誤碼和其他錯誤碼的相關資訊,請參閱 errno_doserrno_sys_errlist_sys_nerr

在 Microsoft 實作中,如果 numbersize 為零, 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) ,這表示保證函式不會修改全域變數,而且傳回的指標不會有別名。 如需詳細資訊,請參閱 noaliasrestrict

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 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

另請參閱

記憶體配置
free
malloc
realloc