我有一个问题和一个问题(我认为它们是相关的)。
问题:我可以在 Fortran 90 中使用定义为指针的指针数组吗?
type string
character, pointer :: str(:)
end type
type(string), pointer :: arr(:)
问题:我有代码(见下文),ifort 11.1 在最后一次写入时给出了段错误。其他编译器,例如 gfortran 4.6.3、ifort 11.1.072、12.0.1 等,都可以正常工作
您可以将代码视为 Python 附加功能的模拟。
program test
implicit none
type string
integer, pointer :: key
character, pointer :: str(:)
end type
type(string), pointer :: arr(:), tmp(:)
allocate(arr(1))
allocate(arr(1)%str(1))
arr(1)%str(1) = 'A'
write(6,*) arr(1)%str(1)
! --------------------
tmp => arr
write(6,*) tmp(1)%str(1)
! --------------------
nullify(arr)
allocate(arr(2))
arr(1)%str => tmp(1)%str
write(6,*) arr(1)%str(1)
end program
预期结果是:
A
A
A
ifort 11.1 在最后一行给出分段错误。现在奇怪的事情来了。如果您注释掉字符串类型中的整数声明,您也将使用 ifort 11.1 获得预期结果。
这是编译器问题还是我使用非标准 Fortran 90 结构?