分享方式:


_recalloc

結合 realloccalloc。 重新配置記憶體中的陣列,並將其項目初始化為 0。

語法

void *_recalloc(
   void *memblock
   size_t num,
   size_t size
);

參數

memblock
先前配置之記憶體區塊的指標。

number
項目數。

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

傳回值

_recalloc 會傳回重新配置後 (且可能有移動) 記憶體區塊的 void 指標。

如果沒有足夠的可用記憶體將區塊擴充為指定的大小,原始區塊會保持不變,並 NULL 傳回。

如果要求的大小為零,則會釋放 memblock 所指向的區塊;傳回值是 NULL,且 memblock 保持指向已釋放的區塊。

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

備註

_recalloc 函式會變更已配置之記憶體區塊的大小。 memblock 引數指向記憶體區塊的開頭。 如果 memblockNULL,則 _recalloc 的行為方式與 calloc 相同,並且會配置 number * size 個位元組的新區塊。 每個元素都會初始化為 0。 如果 memblock 不是 NULL,它應該是先前呼叫 callocmallocrealloc所傳回的指標。

因為新區塊可以位於新的記憶體位置,因此不保證傳 _recalloc 回的指標是透過 自變數傳遞的 memblock 指標。

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

recalloc 呼叫 realloc ,以便使用 C++ _set_new_mode 函式來設定新的處理程式模式。 新的處理常式模式表示失敗時,realloc 是否呼叫 _set_new_handler 所設定的新處理常式。 根據預設, realloc 不會在無法配置記憶體時呼叫新的處理程式例程。 您可以覆寫這個預設行為,因此,在 _recalloc 無法配置記憶體時,realloc 會呼叫新的處理常式,其方法與 new 運算子因相同原因而失敗時所執行的方法相同。 若要覆寫預設值,請及早在程式中呼叫

_set_new_mode(1);

或與 NEWMODE.OBJ 連結。

當應用程式與 C 執行時間連結庫的偵錯版本連結時, _recalloc 會解析為 _recalloc_dbg。 如需如何在偵錯程式期間管理堆積的詳細資訊,請參閱 CRT偵錯堆積

_recalloc 標示 __declspec(noalias) 為 和 __declspec(restrict),這表示保證函式不會修改全域變數,而且傳回的指標不會有別名。 如需詳細資訊,請參閱 noaliasrestrict

根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態

需求

常式 必要的標頭
_recalloc <stdlib.h> 和 <malloc.h>

如需相容性詳細資訊,請參閱相容性

另請參閱

記憶體配置
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
連結選項