malloc
メモリ ブロックを割り当てます。
void *malloc(
size_t size
);
パラメーター
- size
割り当てるバイト数。
戻り値
malloc割り当てられた領域または NULL にメモリ容量が使用できない場合void ポインターを返します。void 以外の型へのポインターを返すには戻り値の型キャストを使用してください。戻り値が指すストレージ領域が適切にどの型のオブジェクトを格納するために配置されることが保証されます。サイズが 0 の場合malloc はヒープの長さの項目を割り当てそのアイテムへの有効なポインターを返します。要求されたメモリの量が小さくて malloc の応答を常に確認してください。
解説
malloc の関数はsize バイトのメモリ ブロックを割り当てます。ブロックは配置の整合性および情報に必要な領域に size バイトを超えることがあります。
malloc は ENOMEM にメモリ割り当てに失敗するか要求されたメモリの量が _HEAP_MAXREQ を超えた場合 errno を設定します。この変更およびそのほかのエラー コードの詳細についてはerrno、_doserrno、_sys_errlist、および _sys_nerr を参照してください。
スタートアップ コードは _environenvp と argv の変数の記憶領域を割り当てるために malloc を使用します。次の関数やワイド文字の対応はmalloc を呼び出します :
|
|||
|
C++ の関数 _set_new_mode の設定 malloc の new ハンドラー モード。新しいハンドラー モードはエラーが発生した場合malloc が _set_new_handler に設定した新しいハンドラー ルーチンを呼び出すかどうかを示します。既定ではmalloc にメモリを割り当てる失敗の new ハンドラー ルーチンを呼び出していません。同じ理由で失敗すると new の演算子はmalloc がメモリを割り当てるとmalloc が新しいハンドラー ルーチンと同じ方法で呼び出すように既定の動作をオーバーライドできます。既定値をオーバーライドするにはを呼び出します。
_set_new_mode(1)
高速 NEWMODE.OBJ のプログラムまたはリンク (リンク オプション を参照してください。
アプリケーションが C ランタイム ライブラリのデバッグ バージョンとリンクしたときmalloc は _malloc_dbg に解決されます。詳細についてはヒープがデバッグ中にマネージ方法についてはCRT デバッグ ヒープ を参照してください。
malloc はグローバル変数を変更しないように関数が保証できない返されたポインターが JIT エイリアス化したことを意味するのマークされた __declspec(noalias) と __declspec(restrict) です。詳細についてはnoalias と 制限します。 を参照してください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。