Fortran数组的指针数组定义为指针(ifort 11.1中的错误?)

问题描述 投票:1回答:1

我有一个问题和一个问题(我认为它们是相关的。)>

问题:我可以在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结构?

我有一个问题和一个问题(我认为它们是相关的)。问题:我可以在Fortran 90中使用定义为指针的指针数组吗?类型字符串字符,指针:: str(:)结束类型...

arrays pointers fortran fortran90 intel-fortran
1个回答
2
投票

您的代码可以使用Intel Fortran 13.0.something毫无问题地编译和执行。连同您在其他编译器和编译器版本上的经验,这确实暗示了一个编译器错误,尽管现已纠正。

我不完全确定Python append函数的作用,但是如果您正在寻找一种Fortran方式来制作其内容(和长度)可以动态变化的字符串,则应认真考虑使用Fortran 2003自动分配功能。例如,您可以定义这样的字符串:

© www.soinside.com 2019 - 2024. All rights reserved.