共用方式為


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。

calloc

fscanf

_getw

setvbuf

_exec 函式

fseek

_popen

_spawn 函式

fgetc

fsetpos

printf

_strdup

_fgetchar

_fullpath

putc

系統

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

puts

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

取得

_searchenv

 

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),這表示函式保證不會修改全域變數且傳回的指標不會產生別名。 如需詳細資訊,請參閱noaliasrestrict

需求

常式

必要的標頭

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。如需詳細資訊,請參閱平台叫用範例

請參閱

參考

記憶體配置

calloc

釋放

realloc

_aligned_malloc