malloc

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

構文

void *malloc(
   size_t size
);

パラメーター

size
割り当てるバイト数。

戻り値

malloc は、割り当てられた領域への void ポインターを返します。使用可能 NULL なメモリが不足している場合は を返します。 void 以外の型へのポインターを返すには、戻り値の型キャストを使用します。 戻り値が指すストレージ領域は、基本アラインメントのアラインメント要件以下の任意のタイプのオブジェクトのストレージに対して適切にアラインされます。 (Visual C++ では、基本的な配置は、 、または 8 バイトにdouble必要なアラインメントです。64 ビット プラットフォームを対象とするコードでは、16 バイトです)。を使用して_aligned_malloc、配置要件が大きいオブジェクト (たとえば、SSE 型と __m256、 を使用して宣言された型__m128) にストレージを__declspec(align( n ))割り当てます。ここで n が 8 より大きい場合。 size が 0 の場合、malloc 関数はヒープに長さが 0 のアイテムを割り当て、そのアイテムへの有効なポインターを返します。 要求されたメモリ量が小さい場合でも、malloc からの戻り値を必ずチェックしてください。

解説

malloc 関数は、少なくとも size バイトのメモリ ブロックを割り当てます。 アラインメントと保守情報に領域が必要なため、ブロックのサイズが size バイトを超えることがあります。

malloc を実行したときに、メモリの割り当てに失敗した場合、または要求されたメモリ量が errno を超える場合は、ENOMEM_HEAP_MAXREQ に設定されます。 このエラー コードおよびその他のエラー コードの詳細については、「errno_doserrno_sys_errlist_sys_nerr」を参照してください。

スタートアップ コードは malloc を使用して、変数 _environenvp、および 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

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「 CRT のグローバル状態」を参照してください。

必要条件

ルーチンによって返される値 必須ヘッダー
malloc <stdlib.h> および <malloc.h>

互換性について詳しくは、「 Compatibility」をご覧ください。

ライブラリ

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" );
   }
}
Memory space allocated for path name
Memory freed

関連項目

メモリ割り当て
calloc
free
realloc
_aligned_malloc