malloc
メモリ ブロックを割り当てます。
構文
void *malloc(
size_t size
);
パラメーター
size
割り当てるバイト数。
戻り値
malloc
は、割り当てられた領域への void ポインターを返します。使用可能なメモリが不足している場合は NULL
。 void
以外の型へのポインターを返すには、戻り値の型キャストを使用します。 戻り値によって指されるストレージ領域は、基本的なアラインメントのアラインメント要件以下の任意のタイプのオブジェクトのストレージに対して適切にアラインされます。 (Visual C++ では、基本的な配置は、double
(8 バイト) に必要なアラインメントです。64 ビット プラットフォームを対象とするコードでは、16 バイトです)。_aligned_malloc
を使用して、配置要件が大きいオブジェクト (たとえば、SSE 型の__m128
と__m256
、n
が 8 より大きい__declspec(align( n ))
を使用して宣言された型) に記憶域を割り当てます。 size
が 0 の場合、malloc
関数はヒープに長さが 0 のアイテムを割り当て、そのアイテムへの有効なポインターを返します。 要求されたメモリ量が小さい場合でも、malloc
からの戻り値を必ずチェックしてください。
解説
malloc
関数は、少なくとも size
バイトのメモリ ブロックを割り当てます。 アラインメントと保守情報に領域が必要なため、ブロックのサイズが size
バイトを超えることがあります。
malloc
を実行したときに、メモリの割り当てに失敗した場合、または要求されたメモリ量が errno
を超える場合は、ENOMEM
が _HEAP_MAXREQ
に設定されます。 このエラー コードおよびその他のエラー コードの詳細については、「errno
、_doserrno
、_sys_errlist
、_sys_nerr
」を参照してください。
スタートアップ コードは malloc
を使用して、変数 _environ
、envp
、および 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