2012-07-18 48 views
0

我在Fortran代碼中收到了這個奇怪的runtype錯誤。我有一個指向用戶定義類型A的指針,作爲用戶定義類型B的一個元素。當我從類型B中的過程調用與類型A相關的過程時,我得到已分配的數組已分配的運行時錯誤。有沒有人看到這個錯誤?Fortran 90可分配數組已在撥號類型綁定過程中分配

對不起顯示驗證碼。但這裏大概是發生了什麼。

type B 
    type(A),pointer :: obj 
contains 
    procedure :: do_something 
end type B 
type A 
    integer,allocatable:: long_array(:) 
    contains 
    procedure :: do_something_to_long_array 
end type A 

program main 
    type(B) :: obj1 
    type(A) ,target :: obj2 

    allocate(obj2%long_array(10)) 
    obj1%obj=>obj2 
    call obj1%obj%do_something_to_long_array() 
end program main 

對do_something_to_long_array的調用給了我那個錯誤。該過程在我的代碼中實現,並在直接調用對象時起作用。我能夠訪問long_array內的值也。但我無法調用子程序。

+1

是的,我見過那個錯誤。當您嘗試分配已分配的數組時通常會發生這種情況。我沒有看到的是你的任何代碼都可以幫助你。 – 2012-07-18 11:53:51

+0

問題已解決。這與我使用的英特爾編譯器的版本有關。在轉向新版本時,問題已解決。 – 2012-07-18 18:04:12

回答

0

看起來好像你已經解決了一些事情,但僅僅爲了這一點,「A型」中的可分配數組就是如此。直到最近,在FORTRAN90的許多版本中,在類型定義中都有可分配數組是不可能的。並且「已分配」錯誤是它在崩潰時返回的錯誤。我認爲這可能是爲什麼你的新編譯器工作,而舊編譯器沒有。

+0

我不知道。直到最近我大部分都是用Python進行編程。 Fortran 90和似乎允許編程在一個非常酷的風格與速度的好處。在類型內部不允許allocatable數組似乎毫無意義,因爲許多數值問題都需要它們。 – 2012-07-19 22:02:12