0

私が以下のコードを持っているとしましょう:

program test
  call foo
  call foo
contains
  subroutine foo
    integer(8),dimension(:),allocatable:: var1
    allocate(var1(10))
    ...
    return
  end subroutine foo
end

変数var1は2回割り当てられますか?(私はそうだと思います)。呼び出しごとに割り当てられた場合、最初の呼び出しで割り当てられたメモリは解放されますか?

4

1 に答える 1

7

var1は、ALLOCATEステートメントが実行されるたびに(つまり、fooプロシージャが呼び出されるたびに)割り当てられます(試行されます)。

Fortran 90(のみ)の規則では、プロシージャが終了すると、fooの割り当てステータスは未定義になります。割り当てステータスが未定義の変数は使用できなくなります。後続のプロシージャの呼び出しで合法的に再割り当てすることはできません。

Fortran 95以降では、これはローカルの保存されていない変数であるため、fooプロシージャの実行が終了するたびにvar1の割り当てが解除されます。

于 2012-08-07T00:48:41.343 に答える