malloc
配置記憶體區塊。
語法
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