目的
ALLOCATE ステートメントは、ポインター・ターゲットと 割り振り可能オブジェクトにストレージを動的に提供します。
構文
>>-ALLOCATE--(--allocation_list--+-----------------------------+--)->< '-,--STAT-- = --stat_variable-' |
allocation
>>-allocate_object--+-------------------------------------------+->< | .-,-------------------------------. | | V | | '-(----+----------------+--upper_bound-+--)-' '-lower_bound--:-' |
規則
ポインターに対して ALLOCATE ステートメントを実行すると、 ポインターは、割り振られたターゲットと関連させられます。 割り振り可能オブジェクトに対して実行すると、 オブジェクトは定義可能になります。
指定する次元の数 (つまり allocation 内の上限の境界の 数) は、allocate_object のランクと等しくなければなりません。 ALLOCATE ステートメントが配列に対して実行された場合、 境界の値はその時点で決定されます。 境界式の中でそれに続くエンティティーの再定義や未定義は配列指定 には影響しません。 下限値が省略された場合は、デフォルトの値 1 が割り当てられます。 下限値が上限値を超えた場合、次元のエクステントは 0 になり、allocate_object の サイズも 0 になります。
allocate_object、または allocate_object の指定された境界は、stat_variable の値、または同じ ALLOCATE ステートメント内にある allocate_object の 値、境界、割り振り状況、または関連付け状況のいずれにも依存しません。
stat_variable は、それが現れる ALLOCATE ステートメントの中に 割り振られません。また、同じ ALLOCATE ステートメント内にある allocate_object の 値、境界、割り振り状況、または関連付け状況に依存しません。
STAT= 指定子を指定せず、このステートメントの実行中にエラー状態が発生した場合、プログラムは終了します。 STAT= 指定子が存在する場合、stat_variable には、 以下の値の 1 つが割り当てられます。
+----------------------------------IBM 拡張----------------------------------+
Stat 値 | エラー状態 |
---|---|
0 | エラーなし |
1 | 割り振りを試みているシステム・ルーチンにエラー |
2 | 割り振りに無効なデータ・オブジェクトが指定された |
3 | 1 と 2 の両方のエラーが発生した |
+------------------------------End of IBM 拡張-------------------------------+
すでに割り振り済みの割り振り可能オブジェクトを割り振ると、ALLOCATE ステートメントでエラー状態が 発生します。
ポインター割り振りは、TARGET 属性を持つオブジェクトを作成します。 ポインター指定を実行することによって、追加のポインターをこの ターゲット (またはターゲットのサブオブジェクト) に関連付けることができます。 すでにターゲットに関連したポインターを再度割り振ると、 以下のようになります。
派生型のオブジェクトが ALLOCATE ステートメントによって作成されると、 割り振り可能最終コンポーネントの割り振り状況は、現在割り振られていない状況になります。
割り振り可能オブジェクトが現在割り振られているかどうかを 判別するには、ALLOCATED 組み込み関数を使用します。 ポインターの関連付け状況、およびポインターが現在指定しているターゲットに 関連付けられているかどうかを調べるには、ASSOCIATED 組み込み関数 を使用します。
例
CHARACTER, POINTER :: P(:,:) CHARACTER, TARGET :: C(4,4) INTEGER, ALLOCATABLE, DIMENSION(:) :: A P => C N = 2; M = N ALLOCATE (P(N,M),STAT=I) ! P is no longer associated with C N = 3 ! Target array for P maintains 2X2 shape IF (.NOT.ALLOCATED(A)) ALLOCATE (A(N**2)) END
関連情報