【发布时间】:2015-05-10 13:36:34
【问题描述】:
我有以下 C++ 代码:
extern "C" void C_ASSIGN_ARRAY_TO_FORTRAN(double *doublearray)
{
doublearray=new double [10];
for (int i=0;i<10;i++)
doublearray[i]=i;
}
数组doublearray 应该传递给Fortran:
USE, INTRINSIC :: ISO_C_BINDING
IMPLICIT NONE
INTERFACE
SUBROUTINE C_ASSIGN_ARRAY_TO_FORTRAN(cdoublearray) BIND(C, NAME='C_ASSIGN_ARRAY_TO_FORTRAN')
USE, INTRINSIC :: ISO_C_BINDING
IMPLICIT NONE
TYPE(C_PTR) :: cdoublearray
END SUBROUTINE
END INTERFACE
TYPE(C_PTR) :: cdoublearray
REAL(C_DOUBLE), POINTER :: fdoublearray(:)
CALL C_ASSIGN_ARRAY_TO_FORTRAN((cdoublearray))
CALL C_F_POINTER( cdoublearray, fdoublearray,[10])
WRITE (*, *) fdoublearray
END
但是,代码在C_F_POINTER 崩溃:调用C_ASSIGN_ARRAY_TO_FORTRAN 后,cdoublearray 等于0。
谁能帮我看看?
【问题讨论】:
-
您的问题到底是什么?它编译吗?是不是跑错了?
-
调用
C_ASSIGN_ARRAY_TO_FORTRAN后,cdoublearray等于0,所以运行到C_F_POINTER时程序就破解了。 -
为什么你将
cdoublearray作为副本传递((cdoublearray))? -
破解了什么?它打印了什么吗?
-
你的意思是“崩溃”吗?
标签: c++ pointers fortran fortran-iso-c-binding