簡體   English   中英

從 C++ 到 fortran 數組的訪問沖突

[英]access violation from C++ to fortran array

我正在開發一個 C++-fortran 混合編譯項目。 在 fortran 方面,我編寫了一個接口來隔離 C++ 引用/指向 fortran 變量的指針。 在 fortran 子例程完成它們的工作后,接口會將值一一分配給 C++ 數組。 回到 C++ 端時出現問題。 我可以在 C++ 調試器中看到每個數組元素的值,但是當我使用 std::cout<<arr[0]<<std::endl 時,它給了我訪問錯誤:

Exception thrown at 0x79762B8E (msvcp140d.dll) in TEST_IO.exe: 0xC0000005: Access violation reading location 0x9C6D0014

我寫了一個簡化的測試代碼:

#include <iostream>
extern "C" {void fort_interface(<typeName1> &par1,<typename2> *par2,....,<typeName> *output);}
int main()
{
..... //setup input parameters
float *arr = new float[N_arr]; //N_arr is big enough.

float check = 12321;
std::cout<<check<<std::endl;
/*the float variable check is independent from fort_interface, just to check the memory status*/

fort_interface(par1, par2,...,arr);

std::cout<<check<<std::endl;//exception occurs!
}

即使我打印出與 fort_interface() 無關的“檢查”,也會報告相同的異常。 同時在調試器中“check”的值為12321。

我寫了另一個玩具 fortran-C++ 代碼來測試 fortran 如何使用指針/引用,一切順利。 可以打印值,析構函數也可以很好地工作。

抱歉,我無法在此處上傳 fortran-C++ 接口,因為它包含 100 多個參數(這就是我編寫此接口以使用外部參數保持 fortran 原始代碼完整的原因。)我只想知道為什么我可以在調試器中看到該值但它無法訪問? 謝謝您的幫助!


更新:問題解決了! 我傳遞了一個指向 fortran 子例程的指針,這導致了段錯誤。 fortran-C 混合編譯設置沒有錯。 只是因為段錯誤。 再次感謝大家!

由於我看不到您的 Fortran-C++ 接口,因此我猜測可能會有所幫助。

在 fortran 中處理數組時,它們在內存中保存為列,而 C/C++ 將它們保存為行。 這使得這兩種語言之間的接口變得棘手。

例如,如果您有 arr[5][5] 並在 C 中調用元素 arr[1][0],編譯器將獲取第 1 行並將其保存在緩存中,而 fortran 編譯器將獲取第 0 列並將其保存在您的緩存中。

我希望這有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM