Fortran Coder

查看: 8017|回复: 2

[混编] Fortran和C++/C混合编程时,动态内存的传递

[复制链接]

62

帖子

14

主题

0

精华

专家

F 币
557 元
贡献
326 点
发表于 2014-12-27 12:23:11 | 显示全部楼层 |阅读模式
本帖最后由 安靖 于 2014-12-27 12:45 编辑

在编程工具交流版块中发过类似的帖子  http://bbs.fcode.cn/thread-393-1-1.html

现在在动态内存的传递上遇到了问题。在c++中申请内存空间,传给fortran,但是失败了


演示例子


c++, testCPP.cpp
[C++] 纯文本查看 复制代码
#indef __cplusplus
extern "C"{
int test_fun_(int *i, int *j, int **array);
}#endif

int test_fun_(int *i,  int *j,  int **array)
{
    int a;
    array= new*[*j];
    for(a = 0; a < *j; a++)
    { 
        array[a] = new int[*i];
    }
    return 0;
}



fortran文件 testF.f90
[Fortran] 纯文本查看 复制代码
program main
     implicit none
     integer ::  i, j
     integer, allocatable, dimension(:,:) :: arry
     i = 3
     j = 4
     call test_fun(i, j , arry)
    if(allocated(array))then          write(*,*) 'sucessful!'
    else
         write(*,*) 'fail!'
    end if
end program

g++  -c  testCPP.cpp
ar -cr libtest.a testCPP.o

ifort -c testF.f90
ifort -o test testF.o -L./ -ltest -lstdc++
运行./test
fail

哪里出问题了?










1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2014-12-27 12:41:14 | 显示全部楼层
fortran 的 allocatable 基本上没有办法与 C 语言的指针混合使用。
原因在于:
1.fortran的可分配数组比c数组信息量丰富,包括维度,每个维度的上下限,步长,首地址。(可以视为一个结构来描述)
2.C的数组指针只有首地址。
3.fortran的可分配数组结构描述,因不同编译器而不同。

我的建议是:
1.谁定义,谁分配,谁释放;谁打开,谁读写,谁关闭;
2.如果 fortran 定义,那么先通过 C 获得大小,然后由 fortran 分配,传递给 C 使用。

62

帖子

14

主题

0

精华

专家

F 币
557 元
贡献
326 点
 楼主| 发表于 2014-12-27 14:23:54 | 显示全部楼层
fcode 发表于 2014-12-27 12:41
fortran 的 allocatable 基本上没有办法与 C 语言的指针混合使用。
原因在于:
1.fortran的可分配数组比c数 ...

谢谢你的建议。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-3-29 08:16

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表