我需要将一个动态数组从 c++ 传递给 Fortran。我做了很多研究来整理一个我认为应该有效的例子,但事实并非如此。该程序应在 c++ 程序中创建一个数组,将该数组的指针传递给 Fortran 例程,将 C 指针转换为 Fortran 指针,然后在 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)
我对指针的想法很陌生,所以我想我不明白它们是如何正常工作的。您能否指出为什么我在运行此程序时会出现此内存错误?