!--a11y-->

ABAP プログラムのデータ領域のデータオブジェクトだけをフィールドシンボルに割り当てることができます。データオブジェクトがフィールドシンボルに割り当てられると、フィールドシンボルがデータ領域外のメモリをアドレスすることでデータが消失しないように、実行時にチェックが行われます。
ABAP プログラムのデータ領域は、次のとおりです。
キ 内部テーブルのテーブルメモリ領域。この記憶域のサイズは、テーブル行の数によって異なります。テーブル行の数は固定されておらず、実行時に動的に決定されます。
キ 他のデータオブジェクトの DATA 記憶域。この記憶域のサイズは、データ宣言で固定されます。
フィールドシンボルは、この領域の外のメモリを指すことはできません。データオブジェクトをフィールドシンボルに割り当て、領域外のアドレスを指すと、実行時エラーが発生します。
内部テーブルの制御ブロックなど一部のシステム情報も、DATA 記憶域に保存されます。したがって、実行時にはチェックが行われますが、項目の一部が誤って上書きされ、エラーが起こる可能性があります ( テーブルヘッダが壊れるなど) 。

PROGRAM DEMO.
DATA: TEXT1(10), TEXT2(10), TEXT3(5).
FIELD-SYMBOLS <FS>.
DO 100 TIMES.
ASSIGN
TEXT1+SY-INDEX(1) TO <FS>.
ENDDO.
DEMO 開始後、実行時エラーが発生します。ショートダンプメッセージの最初は、以下のようになります。

DATA メモリ領域は、25 バイト以上の幅があります ( メモリ内のデータ領域を整列することで拡張可能) 。ループパスの 1 つで、プログラムはこの領域外のアドレスにアクセスしようとします。強制終了メッセージには、項目 SY-INDEX の内容も含まれます。この内容は、そのときによって異なります。24 番目のループパスまでは、エラーは発生しません。ASSIGN 命令の TEXT1 と TEXT2 を交換すると、エラーが 10 個前のループパスで発生します。
