2012-07-10 88 views
0

我有一個問題和一個問題(我認爲它們是相關的)。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結構?

+0

它可能是一個編譯器錯誤,如果它適用於'11.1.072',但不適用於早期版本的'11.1'。 – 2012-07-10 08:52:41

+0

它也適用於11.0。但通常我對編譯器業務的人比對自己的能力更加信任:)。 – Stano 2012-07-10 09:13:04

+1

我總是向英特爾技術支持部門報告可疑的編譯器問題(當然,當它是英特爾編譯器時)。我發現它們比識別產品中的錯誤更好。當然,在這種情況下,他們可能會回答'是的,那是編譯器版本中的一個bug,現在已經修復了。 – 2012-07-10 10:03:22

回答

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' 

觀察t他完全沒有分配大小string1或重新分配它的聲明。

+0

是的,我已經在考慮它了。我一定要試一試。 – Stano 2012-07-10 09:25:00