malloc

メモリ ブロックを割り当てます。

void *malloc(
   size_t size 
);

パラメーター

  • size
    割り当てるバイト数。

戻り値

malloc 関数は、割り当てられた領域への void ポインターを返します。メモリが足りない場合は NULL を返します。 void 以外の型へのポインターを得るには、戻り値に型キャストを行います。 戻り値が指す記憶領域は、どの型のオブジェクトを格納する場合でも、適切に配置されます。 size が 0 の場合、malloc 関数は長さが 0 のアイテムをヒープに割り当て、そのアイテムへの有効なポインターを返します。 要求したメモリ量が少ない場合でも、必ず 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

system

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

puts

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

gets

_searchenv

 

C++ の _set_new_mode 関数は、malloc 関数の new ハンドラーのモードを設定します。 メモリの割り当てに失敗した場合、new ハンドラーのモードに応じて、malloc 関数が _set_new_handler で設定されている new ハンドラー ルーチンを呼び出すかどうかが決まります。 既定では、malloc 関数はメモリの割り当てに失敗しても new ハンドラー ルーチンを呼び出しません。 既定の動作をオーバーライドすると、new 演算子がメモリの割り当てに失敗したときと同じように、malloc 関数がメモリの割り当てに失敗したときにも、malloc 関数は new ハンドラーのルーチンを呼び出すことができます。 既定の動作をオーバーライドするには、プログラムの始めの方で次の関数を呼び出すか、または NEWMODE.OBJ とリンクします。

_set_new_mode(1)

リンク オプション」を参照してください。

アプリケーションを C ランタイム ライブラリのデバッグ バージョンとリンクすると、malloc は _malloc_dbg に置き換わります。 デバッグ中のヒープの処理方法の詳細については、「CRT デバッグ ヒープ」を参照してください。

malloc には __declspec(noalias) と __declspec(restrict) のマークが付けられます。これは、関数がグローバル変数を変更しないことを保証し、返されるポインターがエイリアス指定されないことを意味します。 詳細については、「noalias」および「restrict」を参照してください。

必要条件

ルーチン

必須ヘッダー

malloc

<stdlib.h> および <malloc.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

ライブラリ

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