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 関数はヒープに長さが 0 のアイテムを割り当て、そのアイテムへの有効なポインターを返します。 要求されたメモリ量が小さい場合でも、malloc からの戻り値を必ずチェックしてください。
解説
malloc 関数は、少なくとも size バイトのメモリ ブロックを割り当てます。 アラインメントと保守情報に領域が必要なため、ブロックのサイズが size バイトを超えることがあります。
malloc を実行したときに、メモリの割り当てに失敗した場合、または要求されたメモリ量が _HEAP_MAXREQ を超える場合は、errno が ENOMEM に設定されます。 エラー コードの詳細については、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。
スタートアップ コードは malloc を使用して、変数 _environ、envp、および argv にストレージを割り当てます。 次の関数やこれらに対応するワイド文字関数も、malloc を呼び出します。
|
|||
|
C++ の _set_new_mode 関数は malloc の新しいハンドラー モードを設定します。 新しいハンドラー モードは、エラーが発生したときに、malloc が _set_new_handler によって設定された新しいハンドラー ルーチンを呼び出すかどうかを指定します。 既定では、malloc は、メモリの割り当てエラーの際に新しいハンドラー ルーチンを呼び出しません。 この既定の動作をオーバーライドすると、malloc がメモリの割り当てに失敗したときに、new 演算子が同じ理由で失敗したときと同じ方法で、malloc によって新しいハンドラー ルーチンを呼び出すことができます。 既定の動作をオーバーライドするには、次の関数を呼び出します。
_set_new_mode(1)
この呼び出しはプログラムの最初の方で指定するか、NEWMODE.OBJ にリンクします (「リンク オプション」を参照してください)。
アプリケーションが C のランタイム ライブラリのデバッグ バージョンにリンクされている場合、malloc は _malloc_dbg として解決されます。 デバッグ プロセス中のヒープの管理方法の詳細については、「CRT デバッグ ヒープ」を参照してください。
malloc が __declspec(noalias) と __declspec(restrict) でマークされている場合、この関数がグローバル変数を変更せず、返されるポインターがエイリアス化されない保証があることを意味します。 詳細については、「noalias」および「restrict」を参照してください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。