我需要將一個動態數組從C++傳遞給Fortran。我做了大量的研究,將我認爲應該工作的一個例子放在一起,但事實並非如此。程序應該在C++程序中創建一個數組,將該數組的指針傳遞給Fortran例程,將C指針轉換爲Fortran指針,然後在Fortran端打印該數組。爲什麼試圖將指針從C++傳遞到Fortran不起作用?
我的C++主程序:
using namespace std;
extern "C" {
void cinterface(int*,int*);
}
int main()
{
int carray[]={0,1,2,3,4};
int carray_siz=5;
cinterface(&carray_siz,carray);
return 0;
}
我的Fortran程序:
module fortmod
use ISO_C_BINDING
implicit none
contains
subroutine cinterface(carray_siz,carray_ptr) bind(C)
implicit none
integer(c_int), intent(in) :: carray_siz
type(c_ptr), intent(in) :: carray_ptr
integer(c_int), pointer :: pfarray(:) => NULL()
call C_F_POINTER(carray_ptr,pfarray,[carray_siz])
print *, pfarray
end subroutine cinterface
end module fortmod
我建立這個爲:
gfortran -c fortmod.f90
g++ main.cpp fortmod.o -lgfortran
但是當我運行它,而不是打印的陣列它說:
Segmentation fault (core dumped)
我是新來的指針的想法,所以我想我不理解他們如何正確工作。你能指出爲什麼我在運行時遇到這種內存錯誤嗎?
但Fortran通過引用傳遞參數,所以我想我其實是想傳遞地址,對吧? – rks171
在這種情況下,您想要傳遞數組地址的*地址*(即它是引用以及'carray_siz'引用) –