次の方法で共有


_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 は新しい size が現在のサイズよりも小さいブロックを引き締めない可能性がある; このブロックが低い断片化ヒープによって未満の場合、特に、_expand はブロックを報告する受け入れ、memblockを返します。

アプリケーションが C ランタイム ライブラリのデバッグ バージョンとリンクすると、_expand は _expand_dbgに解決されます。 ヒープのデバッグ中にどのように管理されるかを詳細については、「CRT のデバッグ ヒープ」を参照してください。

この関数は、パラメーターを検証します。 memblock が null ポインターの場合、この関数は パラメーターの検証"に説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、errno が EINVAL に設定され、関数から NULL が返されます。 size が _HEAP_MAXREQより大きい場合は、errno は ENOMEM および関数の戻り値 NULLに設定されます。

必要条件

関数

必須ヘッダー

_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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

関連項目

メモリ割り当て

calloc

free

malloc

_msize

realloc