所以,我已經委託將一些fortran子例程翻譯爲C.這些子例程被稱爲主要基於C的大數據塊的控制流的一部分。將c數組作爲可變大小矩陣傳入fortran
我一次翻譯一個函數,從調用堆棧頂部的函數開始。
我面臨的問題是從C到fortran的數組數據的交接。
假設我們已經宣佈在C數組作爲
int* someCArray = (int*)malloc(50 * 4 * sizeof(int));
現在,這個陣列需要向下傳遞到FORTRAN子程序,用數據來填充
someFortranFunc(someCArray, someOtherParams);
當陣列到達
fortran土地,它被宣佈爲一個可變大小矩陣:
subroutine somefortranfunc(somecarray,someotherparams)
integer somefarray(50,*)
問題是因爲fortran似乎沒有正確確定陣列的大小,因爲程序seg-faults。當我調試程序時,我發現索引到
somefarray(1,2)
報告這是一個無效索引。任何對第一列中任何項目的引用都可以正常工作,但當它到達fortran時,數組中只有一個可用列。
我不能真正改變這個事實,即這是一個在fortran中的可變大小的數組。任何人都可以解釋這裏發生了什麼,有沒有辦法可以緩解事情C方面的問題?
[編輯]
順便說,該Fortran子程序被從替換FORTRAN代碼稱爲
integer somedatastorage(plentybignumber)
integer someindex
...
call somefarray(somedatastorage(someindex))
其中數據存儲爲一個大的一維數組。超出數據存儲的大小沒有問題。不過,不管怎麼樣,傳遞C數組和Fortran(子)數組之間的差異導致fortran子例程的差異。
謝謝!
我不清楚您是否遇到行 - 主要/列主要問題(請參閱http://stackoverflow.com/q/4083490/2509)或者具有fortran中未指定維度的含義。或兩者。 – dmckee
也許你可以發佈一些更完整的代碼,從片段到目前爲止它實際上看起來很好,我想。 – haraldkl
我瞭解行/列主要問題以及1/0索引問題。這個問題似乎與可變大小的fortran陣列有關。我將有效數據傳遞到子例程中,數據按列主要順序排列。看起來fortran正在截斷矩陣的所有列,但只有一列。 – dusktreader