%REALLOC (記憶域の再割り振り)

%REALLOC(ptr:num)

%REALLOC は、最初のパラメーターが指しているヒープ記憶域を変更して、2 番目のパラメーターに指定されている長さにします。戻されたポインターによって指し示されているヒープ・ストレージには、ptr によって指し示されているヒープ・ストレージと同じ値があります。 新しい長さが以前の長さより長い場合には、追加ストレージは初期化されません。

最初のパラメーターは基底ポインター値である必要があります。2 番目のパラメーターは、小数点以下の桁数がゼロである非浮動数値でなければなりません。指定される長さは、1 から最大許容サイズまでの範囲でなければなりません。

最大許容サイズは、制御仕様書の ALLOC キーワードによる、 RPG メモリー管理命令に使用されるヒープ記憶域のタイプによって異なります。 モジュールがテラスペース・ヒープ記憶域を使用する場合、最大許容サイズは 4294967295 バイトです。 それ以外の場合、最大許容サイズは 16776704 バイトです。

実行時に使用可能な最大サイズは、RPG の許容最大サイズより小さい場合があります。

関数は割り振られる記憶域へのポインターを戻します。これはポインター と同じである場合も異なる場合もあります。 %REALLOC 関数が正常に終了した場合には、 第 1 オペランドで指定されていた元のポインター値は使用できません。

モジュールの RPG メモリー管理命令が、制御仕様書の ALLOC キーワードにより、単一レベル・ヒープ記憶域を使用している場合、 %REALLOC 組み込み関数は、単一レベル・ヒープ記憶域へのポインターのみを処理できます。 モジュールの RPG メモリー管理命令が、テラスペース・ヒープ記憶域を使用している場合、 %REALLOC 組み込み関数命令は、単一レベルとテラスペースの両方のヒープ記憶域へのポインターを処理できます。

詳細については、メモリー管理命令を参照してください。

命令が正常に完了しなかった場合、例外 00425 または 00426 が出されます。

図 1. %REALLOC の例
 *..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
 /FREE
   // Allocate an area of 200 bytes
   pointer = %ALLOC(200);
   // Change the size of the area to 500 bytes
   pointer = %REALLOC(pointer:500);
   // Using two different pointers:
   pointer2 = %REALLOC(pointer1:500);
   pointer1 = *NULL;;
   // The returned value was assigned to
   // "pointer2", a different variable
   // from the input pointer "pointer1".
   // In this case, the value of "pointer1"
   // is no longer valid, so "pointer1" must
   // be set to *NULL to avoid using the
   // old value.
 /END-FREE