我有一個問題和一個問題(我認爲它們是相關的)。Fortran90:指針數組定義爲指針數組(錯誤ifort 11.1?)
問題:我可以在Fortran90數組中使用定義爲指針的指針數組嗎?
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 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
預期結果是: 甲 甲 甲
ifort 11.1給出在最後一行段故障。現在來了奇怪的事情。如果你註釋掉字符串類型的整數聲明,你也會在ifort 11.1中得到預期的結果。
這是編譯器問題還是我使用非標準的Fortran90結構?
它可能是一個編譯器錯誤,如果它適用於'11.1.072',但不適用於早期版本的'11.1'。 – 2012-07-10 08:52:41
它也適用於11.0。但通常我對編譯器業務的人比對自己的能力更加信任:)。 – Stano 2012-07-10 09:13:04
我總是向英特爾技術支持部門報告可疑的編譯器問題(當然,當它是英特爾編譯器時)。我發現它們比識別產品中的錯誤更好。當然,在這種情況下,他們可能會回答'是的,那是編譯器版本中的一個bug,現在已經修復了。 – 2012-07-10 10:03:22