1 つの質問と 1 つの問題があります (関連していると思います)。
質問: ポインターとして定義されたポインター配列の Fortran 90 配列を使用できますか?
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 の append 関数のシミュレーションと考えることができます。
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 構造を使用していますか?