在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
相同形状的数组
答案 0 :(得分:2)
它被非正式地称为(.....等待它...)分配时重新分配。使用variable=expr
“如果variable
是分配的可分配变量,则如果expr
是不同形状的数组或variable
和{{1 }}不同,如果expr
是或成为未分配的可分配变量,则将为其分配的每个延迟类型参数等于variable
的相应类型参数,形状为expr
,并且每个下界等于expr
的相应元素。”