_recalloc
realloc 和 calloc 的組合。重新配置在記憶體中的一個陣列並初始化它的項目為 0。
void *_recalloc(
void *memblock
size_t num,
size_t size
);
參數
memblock
先前配置的記憶體區塊的指標。num
項目數目。size
以位元組為單位的每個元素的長度。
傳回值
_recalloc傳回void配置 (以及可能已移動) 的記憶體區塊的指標。
不沒有足夠的記憶體來展開區塊,以指定的大小,如果原始區塊會進行變更,以及NULL會傳回。
如果要求的大小為零,則在區塊所指memblock會釋出。 傳回值是NULL,以及memblock處於指向已釋放的區塊。
傳回的值會指向儲存空間,以保證會適當地對齊來儲存任何型別的物件。若要取得指標的型別,而非void,請使用傳回的值時,施展型別。
備註
_recalloc函式變更已配置的記憶體區塊的大小。memblock引數會指向記憶體區塊的開頭。如果memblock是NULL,_recalloc一樣的行為就calloc和配置新區塊的num * size個位元組。每個元素都會初始化為 0。如果memblock不是NULL,它應該是由先前的呼叫所傳回的指標calloc, malloc,或realloc。
因為新區塊可能會在新的記憶體位置,將指標傳回 _recalloc不保證一定會通過指標memblock引數。
_recalloc設定errno到ENOMEM記憶體配置失敗時,或記憶體數量要求超過_HEAP_MAXREQ。功能或其他錯誤碼資訊,請參閱errno、 _doserrno、 _sys_errlist 和 _sys_nerr。
recalloc呼叫realloc ,才能使用 C++ _set_new_mode 函式來設定新的處理常式模式。新的處理常式 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 和限制。
需求
常式 |
所需的標頭 |
---|---|
_recalloc |
<stdlib.h> 和 <malloc.h> |
其他的相容性資訊,請參閱相容性在簡介中。
.NET Framework 對等用法
不適用。 若要呼叫標準的 c 函式,使用PInvoke。 如需詳細資訊,請參閱平台叫用範例。