首页 > 解决方案 > 使用未在数组赋值中分配的可分配数组

问题描述

在 Fortran 中,如果我使用未在数组赋值中分配的可分配数组,我预计会出现一些运行时错误。但事实证明,可分配数组是在分配期间分配的。这似乎是一个危险的设计。有人可以解释这种设计的原因吗?示例代码如下:

module yj_mod
 real,dimension(:,:),allocatable :: den_i_right
end module yj_mod

program main
  call p()
end program main

subroutine p()
  use yj_mod,only : den_i_right
  implicit none
  real :: a(3,4)
  a=3.0
  den_i_right=a
write(*,*) size(den_i_right,1), size(den_i_right,2)
end subroutine p

我用 gfortran 编译了上面的代码。运行代码表示den_i_right变成了一个形状相同的数组a

标签: fortranallocatable-array

解决方案


它被非正式地称为(.....等待它.....)(重新)分配分配。Fortran 2003 标准中的特定语言使用variable=expr

“如果variable是一个已分配的可分配变量,如果expr是一个不同形状的数组或任何相应的长度类型参数值variableexpr不同,它就会被释放。如果variable是或成为一个未分配的可分配变量,那么它被分配给每个延迟类型参数相等对应的类型参数expr,形状为expr,每个下限等于 的对应元素LBOUND(expr)。"


推荐阅读