malloc | Microsoft Docs

文章推薦指數: 80 %
投票人數:10人

void *malloc( size_t size );. 參數. size 要配置的位元組。

傳回值. malloc 會傳回void 指標至配置的空間;如果沒有足夠的記憶體,則為 NULL 。

跳到主要內容 已不再支援此瀏覽器。

請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。

下載MicrosoftEdge 其他資訊 目錄 結束焦點模式 語言 閱讀英文 儲存 目錄 閱讀英文 儲存 Twitter LinkedIn Facebook 電子郵件 目錄 malloc 發行項 05/02/2022 10位參與者 本文內容 配置記憶體區塊。

語法 void*malloc( size_tsize ); 參數 size 要配置的位元組。

傳回值 malloc會傳回void指標至配置的空間;如果沒有足夠的記憶體,則為NULL。

若要傳回void以外類型的指標,請對傳回值使用類型轉換。

此傳回值所指向的儲存空間保證會經過適當調整,因此可儲存對齊需求小於或等於基本對齊需求的任何物件類型(VisualC++中,基本對齊方式是、或8個位元組所需的double對齊方式。

在以64位平臺為目標的程式碼中,它是16個位元組。

)針對_aligned_malloc具有較大對齊需求的物件配置儲存體,例如,使用__declspec(align(n))其中n所宣告的SSE類型和__m128__m256和類型大於8。

如果size為0,malloc會在堆積中配置零長度項目,並傳回該項目的有效指標。

請一律檢查malloc的傳回值,即使要求的記憶體數量很小亦然。

備註 malloc函式至少會配置size個位元組的記憶體區塊。

因為對齊和維護資訊需要空間,所以此區塊可能會大於size個位元組。

如果記憶體配置失敗,或所要求的記憶體數量超過_HEAP_MAXREQ,malloc會將errno設為ENOMEM。

如需這個和其他錯誤碼的相關資訊,請參閱errno、_doserrno_sys_errlist和_sys_nerr。

啟動程式碼使用malloc來為_environ、envp和argv變數配置儲存空間。

下列函式及其對應的寬字元版本也會呼叫malloc。

calloc _exec功能 fgetc _fgetchar fgets fprintf fputc _fputchar fputs fread fscanf fseek fsetpos _fullpath fwrite getc getchar _getcwd _getdcwd gets _getw _popen printf putc putchar _putenv puts _putw scanf _searchenv setvbuf _spawn功能 _strdup system _tempnam ungetc vfprintf vprintf 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 如需其他相容性資訊,請參閱相容性。

程式庫 所有版本的C執行階段程式庫。

範例 //crt_malloc.c //Thisprogramallocatesmemorywith //malloc,thenfreesthememorywithfree. #include//For_MAX_PATHdefinition #include #include intmain(void) { char*string; //Allocatespaceforapathname string=malloc(_MAX_PATH); //InaC++file,explicitlycastmalloc'sreturn.Forexample, //string=(char*)malloc(_MAX_PATH); if(string==NULL) printf("Insufficientmemoryavailable\n"); else { printf("Memoryspaceallocatedforpathname\n"); free(string); printf("Memoryfreed\n"); } } Memoryspaceallocatedforpathname Memoryfreed 另請參閱 記憶體配置 calloc free realloc _aligned_malloc 本文內容



請為這篇文章評分?