_expand
メモリ ブロックのサイズを変更します。
void *_expand(
void *memblock,
size_t size
);
パラメーター
memblock
既に割り当てられたメモリ ブロックへのポインター。size
バイトの新しいサイズ。
戻り値
_expand が再割り当て済みのメモリ ブロックに void ポインターを返します。_expand はrealloc とは異なりサイズを変更するにはブロックを移動することはできません。このためそれを移動せずにブロックを配置する分なメモリが使用できない場合 _expand への memblock のパラメーターは戻り値と同じです。
_expand は操作でエラーが検出されると NULL を返します。たとえばメモリ ブロックを縮めればに _expand が使用された場合は小ブロック ヒープまたは無効なブロックのポインターを返します NULL の破損が生じる場合があります。
それを移動せずに特定のサイズにブロックを配置するメモリ容量が使用できない場合関数の戻り値 NULL。_expand はサイズに配置されたブロックを要求するより小さい返しません。エラーが発生 errno はエラーの種類を示します。errno の詳細については、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。
適切にどの型のオブジェクトを格納するために配置されることが保証されるストレージ領域の戻り値へのポインター。項目の新しいサイズを確認するには_msize を使用します。void 以外の型へのポインターを取得するには戻り値の型キャストを使用してください。
解説
_expand のヒープ関数の場所を移動せずにブロックを配置したり表示しようとして前に割り当てられたメモリ ブロックのサイズ。ブロックの先頭への memblock のパラメーターのポインター。size のパラメーターはバイト ブロックの新しいサイズが表示されます。ブロックの内容は新しい古いサイズの短いまでの値は変更できません。memblock は解放済みのブロックしないでください。
[!メモ]
64 ビット プラットフォームでは_expand は新しいサイズである場合は現在のサイズより小さいブロックを引き締めない場合があります。; このブロックが少ない断片化ヒープにある 16K よりも少しずつ割り当てた場合に特に _expand はブロックを報告するだけでmemblock を返します。
アプリケーションが C ランタイム ライブラリのデバッグ バージョンとリンクしたとき_expand は _expand_dbg に解決されます。詳細についてはヒープがデバッグ中にマネージ方法についてはCRT デバッグ ヒープ を参照してください。
この関数は、パラメーターを検証します。memblock が null ポインターの場合この関数は パラメーターの検証 に説明されているように無効なパラメーター ハンドラーを呼び出します。実行の継続が許可された場合、errno が EINVAL に設定され、関数から NULL が返されます。size が _HEAP_MAXREQ より大きい場合errno は ENOMEM および関数の戻り値 NULL に設定されます。
必要条件
Function |
必須ヘッダー |
---|---|
_expand |
<malloc.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_expand.c
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
char *bufchar;
printf( "Allocate a 512 element buffer\n" );
if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )
exit( 1 );
printf( "Allocated %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )
printf( "Can't expand" );
else
printf( "Expanded block to %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
// Free memory
free( bufchar );
exit( 0 );
}
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。