ALLOCATE文
copyright

green dotALLOCATE文

ALLOCATE文は、「配列を割り付ける」場合と「ポインタの指示先の割付け」の 2つがある。

green dot割付け配列

配列の大きさを実行時に(動的に)決めるのがALLOCATE文で、配列が 不要になった場合に解放するのがDEALLOCATE文である。
このように動的に大きさを決める配列は、ALLOCATABLE属性を 使って宣言する必要がある。

  型指定子,DIMENSION(:),ALLOCATABLE :: 配列名,…
  ALLOCATE(配列名(配列の大きさ),…)
  DEALLOCATE(配列名,…)  

[例]
mとnの値を入力し、a(m,n)の整数型配列aを割付け、使用後に配列aを解放する。

    INTEGER,DIMENSION(:,:),ALLOCATABLE :: a
    INTEGER :: m,n
    READ(*,*) m,n
    ALLOCATE(a(m,n))
        :
    DEALLOCATE(a)

green dotポインタ指示先の割付け

ポインタに対するALLOCATE文の実行を行うとポインタは指示先と結合し、 その指示先の引用および確定に使用できるようになる。
ポインタの割付けは、TARGET属性を暗黙的にもつ実体と結合する。 このポインタ指示先または、その一部にポインタ代入文によって 別のポインタを結合してもよい。
この場合、ポインタの属性およびALLOCATE文に指定した配列 上下限によって要求されるポインタ指示先が新たに生成される。

  ALLOCATE (ポインタ,…)

[例]
以下の ALLOCATE文は次の(1)(2)を行う。

   (1) list構造をもつ領域を確保する。
   (2) rootは確保された領域の先頭のアドレスを指す。


 
    TYPE list
       INTEGER :: num
       TYPE(list),POINTER :: next
    END TYPE list
    TYPE(list),POINTER :: root,prt
    ALLOCATE(root)
line-end