5.4.17 ALLOCATE AREA/FREE AREA(領域の確保と解放)(AIX(32),AIX(64),Linux(x86),Linux(x64),Solaris(SPARC)で有効)

<この項の構成>
(1) ALLOCATE AREA(領域の確保)
(2) FREE AREA(領域の解放)

(1) ALLOCATE AREA領域の確保

アドレス名によって参照されるデータ項目と同じサイズの領域を確保して,アドレス名にアドレスを設定します。

また,AIX(32),AIX(64),Linux(x86),Linux(x64)では,指定されたサイズの領域を確保して,アドレスデータ項目またはポインタ項目にアドレスを設定できます。

形式
[図データ]
  • 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' ) *> 領域破壊を起こす。

(2) FREE AREA領域の解放

アドレス名の示す領域を解放します。

AIX(32),AIX(64),Linux(x86),Linux(x64)では,アドレスデータ項目またはポインタ項目も指定できます。

形式
[図データ]
  • AREA(データ名指定)
    確保した領域を解放するアドレス名を指定します。
    または,確保した領域を解放するアドレスデータ項目,もしくはポインタ項目を指定します。
注意事項
  • ALLOCATE AREAコマンドで確保された領域以外は解放できません。
  • 領域の解放後,アドレス名にZEROが設定されます。アドレスデータ項目またはポインタ項目を指定した場合も同様です。
  • マルチスレッドプログラムでは使用できません。