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

时间:2012-07-10 08:43:03

标签: arrays pointers fortran fortran90 intel-fortran

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

问题:我可以在Fortran90中使用定义为指针的指针数组吗?

type string
  character, pointer :: str(:)
end type

type(string), pointer :: arr(:)

问题: 我有代码(见下文),ifort 11.1在最后一次写入中给出了segfault。其他编译器,如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

预期结果是: 一个 一个 甲

ifort 11.1在最后一行给出了分段错误。现在来了奇怪的事情。如果你在类型字符串中注释掉整数声明,你也会得到ifort 11.1的预期结果。

这个编译器问题还是我使用的是非标准的Fortran90结构?

1 个答案:

答案 0 :(得分:1)

使用英特尔Fortran 13.0.something,您的代码可以毫无问题地编译和执行。结合您对其他编译器和编译器版本的经验,这确实提出了一个编译器错误,尽管现在已经纠正了。

我不完全确定Python追加函数的作用,但如果您正在寻找Fortran方法来创建其内容(和长度)可以动态更改的字符串,那么您应该认真考虑使用Fortran 2003自动分配功能。例如,您可以定义如下字符串:

character(len=:), allocatable :: string1

给它一个这样的值:

string1 = 'this is string 1'

并给它另一个这样的值:

string1 = 'this is'

或者像这样

string1 = string1//' more text'

观察完全没有分配string1大小或重新分配它的语句。