0

The deallocate statement is used to recover storage of an allocatable array that is no more needed. What about non-allocatable arrays? Suppose (in the main and only program) there is a declaration like

INTEGER, DIMENSION(100,100) :: A

This array is used once and then no more. What if I want to make it's space free?

4

1 回答 1

1

您提供的示例不是可分配数组,而是一个简单的静态数组,仅存在于创建它的范围内。一旦变量超出范围,分配给静态数组的内存通常会被释放,但这取决于其他情况,例如是否隐式保存等。

要成为可分配数组,它的声明中必须有 ALLOCATABLE。此外,您需要分配它。

可分配数组的重点是 FORTRAN 将为您管理释放。

一旦数组超出范围,fortran 就会为您解除分配。这样,这个数组就没有内存泄漏风险。

示例改编自http://www.fortran90.org/src/best-practices.html

subroutine do_something
    real(dp), allocatable :: lam
    allocate(lam(5))
    ...
end subroutine do_something

在例程结束时,lam 数组将被自动释放。

于 2016-06-30T11:21:56.227 回答