小编KVK*_*318的帖子

Fortran/C 互操作性使用可分配项将结构从 Fortran 传递到 C

我正在尝试将一个结构从 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)

c struct fortran fortran-iso-c-binding intel-fortran

5
推荐指数
1
解决办法
981
查看次数