【发布时间】:2019-10-22 12:27:11
【问题描述】:
我想知道在现代 Fortran 中是否有可能使用它自己或它的一部分来分配一个可分配数组。这是一个简单的例子:
module modu
implicit none
type :: t
integer :: i
end type
contains
subroutine assign(a,b)
type(t), allocatable, intent(out) :: a(:)
type(t), intent(in) :: b
allocate(a(1))
a(1) = b
end subroutine
end module
!----------------------
program test
use modu
implicit none
type(t), allocatable :: a(:)
allocate(a(1))
a(1)%i = 2
call assign(a, a(1))
print*, a(1)%i
end program
此代码使用 ifort 18 给出正确答案,并使用 gfortran 7.4 返回“分段错误”。
注意:最初的问题有点复杂,因为 call assign(a, a(1)) 应该替换为 call assign(a, a(1)+b) 并正确重载 operator +,但结论(尊重 ifort 和 gfortran)是相同的。
注意:在线程 checking for self-assignment in fortran overloaded assignment 中,@IanH 区分了 call assign(a,a) 和 call assign(a,(a)),但我相信它不能解决这个问题,因为我有可分配的参数。
注意:在线程 Automatic array allocation upon assignment in Fortran 中,@francescalus 解释了内在赋值的自动分配,但我再次相信它不适用于这里。
【问题讨论】:
标签: fortran variable-assignment allocatable-array