%REALLOC (記憶域の再割り振り)
%REALLOC(ptr:num)
%REALLOC は、最初のパラメーターが指しているヒープ記憶域を変更して、2 番目のパラメーターに指定されている長さにします。戻されたポインターによって指し示されているヒープ・ストレージには、ptr によって指し示されているヒープ・ストレージと同じ値があります。 新しい長さが以前の長さより長い場合には、追加ストレージは初期化されません。
最初のパラメーターは基底ポインター値である必要があります。2 番目のパラメーターは、小数点以下の桁数がゼロである非浮動数値でなければなりません。指定される長さは、1 から最大許容サイズまでの範囲でなければなりません。
最大許容サイズは、制御仕様書の ALLOC キーワードによる、 RPG メモリー管理命令に使用されるヒープ記憶域のタイプによって異なります。 モジュールがテラスペース・ヒープ記憶域を使用する場合、最大許容サイズは 4294967295 バイトです。 それ以外の場合、最大許容サイズは 16776704 バイトです。
実行時に使用可能な最大サイズは、RPG の許容最大サイズより小さい場合があります。
関数は割り振られる記憶域へのポインターを戻します。これはポインター と同じである場合も異なる場合もあります。 %REALLOC 関数が正常に終了した場合には、 第 1 オペランドで指定されていた元のポインター値は使用できません。
モジュールの RPG メモリー管理命令が、制御仕様書の ALLOC キーワードにより、単一レベル・ヒープ記憶域を使用している場合、 %REALLOC 組み込み関数は、単一レベル・ヒープ記憶域へのポインターのみを処理できます。 モジュールの RPG メモリー管理命令が、テラスペース・ヒープ記憶域を使用している場合、 %REALLOC 組み込み関数命令は、単一レベルとテラスペースの両方のヒープ記憶域へのポインターを処理できます。
詳細については、メモリー管理命令を参照してください。
命令が正常に完了しなかった場合、例外 00425 または 00426 が出されます。
*..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