5.4.17 ALLOCATE AREA/FREE AREA(領域の確保と解放)
(1) ALLOCATE AREA(領域の確保)
アドレス名によって参照されるデータ項目と同じサイズの領域を確保して,アドレス名にアドレスを設定します。
また,指定されたサイズの領域を確保して,アドレスデータ項目またはポインタ項目にアドレスを設定できます。
- 形式
-
-
AREA(データ名指定1)
ポインタ項目またはアドレスデータ項目を指定します。
LENGTHオペランドに指定されたサイズの領域を確保して,指定されたポインタ項目またはアドレスデータ項目に,確保した領域のアドレスを設定します。
-
LENGTH(領域長)
指定された領域長分の領域を確保します。指定できる長さは,1〜2,147,483,647バイトです。なお,データ名を使った指定はできません。
-
AREA(データ名指定2)
アドレス名を指定します。アドレス名によって参照されるデータ項目と同じサイズの領域を確保して,指定されたアドレス名に確保した領域のアドレスを設定します。
-
- 注意事項
-
-
確保した領域は,X'00'で初期化されます。
-
確保した領域は,次の場合に解放されます。
・FREE AREAコマンドを実行したとき。
・プログラムの実行が終了したとき。
-
マルチスレッドプログラムでは使用できません。
-
LENGTHオペランドを指定して確保した領域を使用する場合に,確保した領域を超える部分にアクセスしたときの動作は保証しません。
例えば,次の条件でテストした場合,ADDRESS_NAMEには英数字3文字分の領域にしか割り当たりません。
DATA2へ代入するのは'ABC'の3文字ですが,定義は10文字なので残りの7文字分の埋め字処理で領域破壊が起きます。
・COBOLソースでのデータ定義
01 DATA1 ADDRESSED BY ADDRESS_NAME.
02 DATA2 PIC X(10).
01 ADDRESS_DATA USAGE ADDRESS.
・デバッガで実行するTDコマンド
ALLOCATE AREA( ADDRESS_DATA ) LENGTH( 3 )
ASSIGN DATA( ADDRESS_NAME ) VALUE( ADDRESS_DATA )
ASSIGN DATA( DATA2 ) VALUE( 'ABC' ) *> 領域破壊を起こす。
-