realloc
メモリ ブロックを再割り当てします。
void *realloc(
void *memblock,
size_t size
);
パラメーター
memblock
既に割り当てられたメモリ ブロックへのポインター。size
バイトの新しいサイズ。
戻り値
realloc が再割り当てされる場合 (移動) されるメモリ ブロックの void のポインターを返します。
特定のサイズにブロックを配置できる使用可能なメモリがない場合ブロックは変更されずNULL が返されます。
size がゼロの場合memblock が指すブロックが解放されます。; 戻り値は NULL でmemblock は解放済みのブロックのポインターを保持されます。
適切にどの型のオブジェクトを格納するために配置されることが保証されるストレージ領域の戻り値へのポインター。void 以外の型へのポインターを取得するには戻り値の型キャストを使用してください。
解説
realloc 関数で割り当てられたメモリ ブロックのサイズ。メモリ ブロックの先頭への memblock の引数のポインター。memblock が NULL 場合realloc は malloc と同じように動作しsize バイトの新しいブロックを割り当てます。memblock が NULL であるcallocmallocまたは realloc への前の呼び出しによって返されるポインターのようになります。
size の引数をバイト ブロックの新しいサイズが表示されます。ブロックの内容が新しいブロックが別の場所に存在する場合もありますが新しい古いサイズの短いまでの値は変更できません。新しいメモリ ブロックが新しい場所になるため realloc によって返されるポインターは memblock の引数で渡されたポインターであることが保証されます。realloc はバッファーの増加場合は新しく割り当てられたメモリをゼロにすることはできません。
realloc は ENOMEM にメモリ割り当てに失敗するか要求されたメモリの量が _HEAP_MAXREQ を超えた場合 errno を設定します。この変更およびそのほかのエラー コードの詳細についてはerrno、_doserrno、_sys_errlist、および _sys_nerr を参照してください。
realloc の 呼び出し mallocC++ _set_new_mode の関数を新しいハンドラー モードを設定するために使用します。新しいハンドラー モードはエラーが発生した場合malloc が _set_new_handler に設定した新しいハンドラー ルーチンを呼び出すかどうかを示します。既定ではmalloc にメモリを割り当てる失敗の new ハンドラー ルーチンを呼び出していません。同じ理由で失敗すると new の演算子はrealloc がメモリを割り当てるとmalloc が新しいハンドラー ルーチンと同じ方法で呼び出すように既定の動作をオーバーライドできます。既定値をオーバーライドするにはを呼び出します。
_set_new_mode(1)
古いものに NEWMODE.OBJ のプログラムまたはリンク (リンク オプション を参照してください。
アプリケーションが C ランタイム ライブラリのデバッグ バージョンとリンクしたときrealloc は _realloc_dbg に解決されます。詳細についてはヒープがデバッグ中にマネージ方法についてはCRT デバッグ ヒープ を参照してください。
realloc はグローバル変数を変更しないように関数が保証できない返されたポインターが JIT エイリアス化したことを意味するのマークされた __declspec(noalias) と __declspec(restrict) です。詳細についてはnoalias と 制限します。 を参照してください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
realloc |
<stdlib.h> および <malloc.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_realloc.c
// This program allocates a block of memory for
// buffer and then uses _msize to display the size of that
// block. Next, it uses realloc to expand the amount of
// memory used by buffer and then calls _msize again to
// display the new amount of memory allocated to buffer.
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
long *buffer, *oldbuffer;
size_t size;
if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
exit( 1 );
size = _msize( buffer );
printf_s( "Size of block after malloc of 1000 longs: %u\n", size );
// Reallocate and show new size:
oldbuffer = buffer; // save pointer in case realloc fails
if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) ))
== NULL )
{
free( oldbuffer ); // free original block
exit( 1 );
}
size = _msize( buffer );
printf_s( "Size of block after realloc of 1000 more longs: %u\n",
size );
free( buffer );
exit( 0 );
}
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。