使用未在数组分配中分配的可分配数组

时间:2018-12-21 21:49:46

标签: fortran allocatable-array

在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相同形状的数组

1 个答案:

答案 0 :(得分:2)

它被非正式地称为(.....等待它...)分配时重新分配。使用variable=expr

的Fortran 2003标准中的特定语言

“如果variable是分配的可分配变量,则如果expr是不同形状的数组或variable和{{1 }}不同,如果expr是或成为未分配的可分配变量,则将为其分配的每个延迟类型参数等于variable的相应类型参数,形状为expr,并且每个下界等于expr的相应元素。”