说我有以下代码:
program test
call foo
call foo
contains
subroutine foo
integer(8),dimension(:),allocatable:: var1
allocate(var1(10))
...
return
end subroutine foo
end
变量var1会被分配两次吗? (我猜是)。如果为每个呼叫分配,第一次呼叫期间分配的内存是否会空闲?
答案 0 :(得分:6)
每次执行ALLOCATE语句时(即每次调用foo过程时)都将(尝试)分配var1。
根据Fortran 90的规则(仅限),当程序结束时,foo的分配状态变为未定义。具有未定义分配状态的变量将变为不可用 - 您无法在后续的过程调用中合法地重新分配。
在Fortran 95及更高版本中,因为它是一个本地的,未保存的变量,所以每次执行foo过程结束时都会释放var1。