malloc
配置記憶體區塊。
void *malloc(
size_t size
);
參數
- size
配置的位元組。
傳回值
malloc 會傳回配置空間的 void 指標,如果沒有足夠的可用記憶體則為 NULL。 若要傳回 void 之外的類型指標,請在傳回值上使用類型轉換。 對於對齊需求小於或等於基本對齊之任何物件類型的儲存空間,傳回值指向的儲存空間保證適當對齊。(在 Visual C++ 中,基本對齊是針對 double或 8 位元組所需的對齊方式。 在以 64 位元平台為目標的程式碼中,這是 16 個位元組)。使用 _aligned_malloc,對具有更大對齊需求的物件配置儲存空間,例如,SSE 類型 __m128 和 __m256,以及透過使用 __declspec(align(n)) 宣告的類型,其中 n 大於 8。 如果 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。
需求
常式 |
必要的標頭 |
---|---|
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" );
}
}
.NET Framework 對等用法
不適用。若要呼叫標準 C 函式,請使用 PInvoke。如需詳細資訊,請參閱平台叫用範例。