0

假设我有以下代码:

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

变量 var1 会被分配两次吗?(我猜是)。如果为每个调用分配它,那么在第一次调用期间分配的内存是否会变得空闲?

4

1 回答 1

7

每次执行 ALLOCATE 语句(即每次调用 foo 过程)时,都会(尝试)分配 var1。

根据 Fortran 90 的规则(仅),当过程结束时 foo 的分配状态变为未定义。具有未定义分配状态的变量将变得不可用 - 您不能在随后的过程调用中合法地重新分配。

在 Fortran 95 和更高版本中,因为它是一个本地的、未保存的变量,所以每次 foo 过程的执行结束时都会释放 var1。

于 2012-08-07T00:48:41.343 回答