gpt4 book ai didi

c++ - 如何将 C++ 指针传递给 Fortran?

转载 作者:搜寻专家 更新时间:2023-10-31 01:40:08 25 4
gpt4 key购买 nike

我有以下 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。谁能帮我看看?

最佳答案

你在这里传递了一个指针的拷贝

CALL C_ASSIGN_ARRAY_TO_FORTRAN((cdoublearray))

复制是由第二组括号组成的。因此 cdoublearray 永远不会改变,并保留原始的未定义值,而 e 为 0。

尝试

CALL C_ASSIGN_ARRAY_TO_FORTRAN(cdoublearray)

但要小心,在释放数组时你仍然会遇到问题。这必须从 C++ 完成。

您还必须调整过程以接受指向指针的指针。请参阅@AlexenderVogt 的回答。

关于c++ - 如何将 C++ 指针传递给 Fortran?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com