Share via


malloc

配置記憶體區塊。

void *malloc(
   size_t size 
);

參數

  • size
    若要配置的位元組數。

傳回值

malloc若要配置的空間會傳回 void 指標或NULL如果沒有可用的記憶體不足。 若要返回指標型別不是void,請使用傳回的值時,施展型別。 傳回的值所指向的儲存空間一定要適當地對齊來儲存任何型別的物件。 如果大小為 0, malloc會配置在堆積中的空項目,並傳回該項目有效的指標。 一定要檢查的傳回malloc,即使要求的記憶體量很小。

備註

malloc函式中配置的記憶體區塊至少size個位元組。 區塊可能大於size個位元組,因為所需的對齊方式和維護資訊的空間。

malloc設定errno到ENOMEM記憶體配置失敗時,或記憶體數量要求超過_HEAP_MAXREQ。 功能或其他錯誤碼資訊,請參閱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

放置

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

取得

_searchenv

 

C + + _set_new_mode 函式會設定為新的處理常式模式malloc。 新的處理常式 mode 指出是否在失敗時, malloc就是呼叫新的處理常式所設定的 _set_new_handler。 預設情況下, malloc不會將新的處理常式呼叫上配置記憶體失敗。 您可以覆寫此預設行為,以便,當malloc無法配置記憶體, malloc在同一個呼叫新的處理常式,就像new運算子不會因相同原因而失敗時。 若要覆寫預設值,請呼叫

_set_new_mode(1)

早期在您的程式或使用 NEWMODE 的連結。OBJ (see 連結選項).

當應用程式被連結的 c 執行階段程式庫的偵錯版本malloc會解析成 _malloc_dbg。 如需有關如何管理在偵錯的程序的堆積的詳細資訊,請參閱的 CRT 偵錯堆積

malloc標示為__declspec(noalias)和__declspec(restrict),這表示函式保證不修改全域變數,且指標所傳回的不是別名。 如需詳細資訊,請參閱 noalias限制

需求

常式

所需的標頭

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

free

realloc