配置記憶體區塊。
語法
void *malloc(
size_t size
);
參數
size
要配置的位元組。
傳回值
malloc 會傳回配置空間的 void 指標,如果 NULL 記憶體不足,則傳回 。 若要傳回 void 以外類型的指標,請對傳回值使用類型轉換。 傳回值所指向的儲存空間會適當地對齊任何類型對象的儲存空間,其對齊需求小於或等於基本對齊。 (在 Visual C++ 中,基本對齊是 、 或 8 個字節所需的double對齊方式。在以64位平臺為目標的程式代碼中,它是16個字節。使用 _aligned_malloc 來配置具有較大對齊需求之物件的記憶體,例如,使用 where n 大於 8 宣告__declspec(align( n ))的 SSE 類型和 __m128 __m256、 和類型。 如果 size 為 0,malloc 會在堆積中配置零長度項目,並傳回該項目的有效指標。 請一律檢查 malloc 的傳回值,即使要求的記憶體數量很小亦然。
備註
malloc 函式至少會配置 size 個位元組的記憶體區塊。 因為對齊和維護資訊需要空間,所以此區塊可能會大於 size 個位元組。
如果記憶體配置失敗,或所要求的記憶體數量超過 _HEAP_MAXREQ,malloc 會將 errno 設為 ENOMEM。 如您需要此錯誤碼和其他錯誤碼的相關資訊,請參閱errno、 _doserrno_sys_errlist與 _sys_nerr。
啟動程式碼使用 malloc 來為 _environ、envp 和 argv 變數配置儲存空間。 下列函式及其對應的寬字元版本也會呼叫 malloc。
C++函式 _set_new_mode 會設定 的新處理程式模式 malloc。 新的處理常式模式表示失敗時,malloc 是否呼叫 _set_new_handler 所設定的新處理常式。 根據預設, malloc 不會在無法配置記憶體時呼叫新的處理程式例程。 您可以覆寫這個預設行為,因此,在 malloc 無法配置記憶體時,malloc 會呼叫新的處理常式,其方法與 new 運算子因相同原因而失敗時所執行的方法相同。 若要覆寫預設值,請在程式早期呼叫 _set_new_mode(1) 或連結 NEWMODE.OBJ (請參閱 連結選項)。
當應用程式與 C 執行時間連結庫的偵錯版本連結時, malloc 會解析為 _malloc_dbg。 如需如何在偵錯程式期間管理堆積的詳細資訊,請參閱 CRT 偵錯堆積詳細數據。
malloc 標示 __declspec(noalias) 為 與 __declspec(restrict)。 這些屬性表示函式保證不會修改全域變數,而且傳回的指標不會有別名。 如需詳細資訊,請參閱 noalias 和 restrict。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
需求
| 常式 | 必要的標頭 |
|---|---|
malloc |
<stdlib.h> 和 <malloc.h> |
如需相容性詳細資訊,請參閱相容性。
程式庫
所有版本的 C 執行階段程式庫。
範例
// crt_malloc.c
// This program allocates memory with
// malloc, then frees the memory with free.
#include <stdlib.h> // For _MAX_PATH definition
#include <stdio.h>
#include <malloc.h>
int main( void )
{
char *string;
// Allocate space for a path name
string = malloc( _MAX_PATH );
// In a C++ file, explicitly cast malloc's return. For example,
// string = (char *)malloc( _MAX_PATH );
if( string == NULL )
printf( "Insufficient memory available\n" );
else
{
printf( "Memory space allocated for path name\n" );
free( string );
printf( "Memory freed\n" );
}
}
Memory space allocated for path name
Memory freed