的Fortran分配数组寿命(Fortran allocatable array lifetime)

2019-07-30 19:52发布

说我有下面的代码:

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

将变量VAR1获得分配两次? (我猜是)。 如果分配给每个呼叫,将分配的内存中的第一个电话变成免费的吗?

Answer 1:

VAR1将(尝试)来分配每个ALLOCATE语句时执行(即foo的过程被称为每次)。

下的Fortran 90的规则(仅)foo的分配状态成为在过程结束时未定义的。 未定义分配状态的变量便无法使用 - 你不能在合法的程序的后续调用重新分配。

在Fortran 95的,后来,因为它是一个局部的,非保存的变量,VAR1将被释放foo的程序的每一次执行结束。



文章来源: Fortran allocatable array lifetime