_recalloc
結合 realloc
和 calloc
。 重新配置記憶體中的陣列,並將其項目初始化為 0。
語法
void *_recalloc(
void *memblock
size_t num,
size_t size
);
參數
memblock
先前配置之記憶體區塊的指標。
number
項目數。
size
每個項目的長度 (位元組)。
傳回值
_recalloc
會傳回重新配置後 (且可能有移動) 記憶體區塊的 void
指標。
如果沒有足夠的可用記憶體將區塊擴充為指定的大小,原始區塊會保持不變,並 NULL
傳回。
如果要求的大小為零,則會釋放 memblock
所指向的區塊;傳回值是 NULL
,且 memblock
保持指向已釋放的區塊。
傳回值會指向適合儲存任何類型的物件的儲存空間。 若要取得 void
以外之類型的指標,請對傳回值使用類型轉換。
備註
_recalloc
函式會變更已配置之記憶體區塊的大小。 memblock
引數指向記憶體區塊的開頭。 如果 memblock
是 NULL
,則 _recalloc
的行為方式與 calloc
相同,並且會配置 number
* size
個位元組的新區塊。 每個元素都會初始化為 0。 如果 memblock
不是 NULL
,它應該是先前呼叫 calloc
、 malloc
或 realloc
所傳回的指標。
因為新區塊可以位於新的記憶體位置,因此不保證傳 _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)
,這表示保證函式不會修改全域變數,而且傳回的指標不會有別名。 如需詳細資訊,請參閱 noalias
和 restrict
。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
需求
常式 | 必要的標頭 |
---|---|
_recalloc |
<stdlib.h> 和 <malloc.h> |
如需相容性詳細資訊,請參閱相容性。
另請參閱
記憶體配置
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
連結選項