我正在尝试将一个结构从 Fortran 传递到 C,其中 Fortran 中的结构有一个可分配的。我想在 fortran 中的结构内分配数组并在 C 中读取它。但是,当我尝试在 CI 中打印分配的数组时,收到错误消息分段错误(核心转储)。我使用的是英特尔编译器版本 19.0.1.144。
我对 C 比较陌生,所以为了测试这个想法,我在 fortran 中分配了一个一维数组并将其传递给 C。这非常有效。您可以在 fortran 代码中看到 ff 是可分配数组,并且为它分配了维度 ii(等于 5)。我初始化数组ff并使用类型(C_ptr)的指针来存储ff数组的地址。我在 C 中打印 ff ,它打印出正确的值 ff ,即 14.7,15.7,16.7,17.7,18.7。使用相同的想法,我声明了一个带有整数 ival、实数 cval 和可分配变量 dval 的结构体 data1。我正在为结构类型 data1 分配一个指针 pdata。我分配了指针和数组 dval。我在 C Main 中调用 fortran 来打印结构数量,当我打印数组 d (或 dval)时出现错误。另外,C中的ival和cval的值也不正确。
SUBROUTINE Simulation(ii,ffp,cdata) BIND(C)
use, intrinsic :: iso_c_binding
integer(kind=4), intent(in) :: ii
type(C_PTR), intent(out) :: ffp
real (C_double), dimension(:), allocatable, target, save :: ff
integer(kind=4) :: err, i
Type :: data1 …Run Code Online (Sandbox Code Playgroud)