Fortran Coder

查看: 19873|回复: 15
打印 上一主题 下一主题

[混编] deallocate内存访问错误及DLL问题

[复制链接]

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

楼主
发表于 2015-4-16 18:42:16 | 显示全部楼层
本帖最后由 pasuka 于 2015-4-16 18:43 编辑

在deallocate语句前面加个判断
if(allocated(**))deallocate(**)
还有可能是Fortran和C/C++混编的时候,数组越界,所以deallocate的时候出问题

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

沙发
发表于 2015-4-16 22:31:35 | 显示全部楼层
用gfortran编译成dll再调用没发现问题
只是在调用前加了个检查
  if(allocated(iv_int))deallocate(iv_int)
  call allocate_test(iv_int)

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

板凳
发表于 2015-4-17 08:55:44 | 显示全部楼层
fcode 发表于 2015-4-17 08:25
正如之前我说过的那样,这是具体编译器实现的问题。你要想深究为什么,恐怕只能反汇编分析。

正如 pasuka  ...

可分配数组传入子程序后在进行内存分配好像是F08新特性,有可能lz的IVF版本低,所以不支持?!
此外就是Debug和Release的状态下,IVF编译参数不同导致出现问题

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

地板
发表于 2015-4-19 21:36:02 | 显示全部楼层
fcode 发表于 2015-4-17 09:52
这是 F2003 特征,IVF是予以支持的。很早就支持了。这个不存在问题。

但是这个特征需要 interface,如果 ...

查了Gfortran的更新记录,TR 15581从4.2版本就开始支持
stackoverflow上面的解答可能更全面些:
How to pass allocatable arrays to subroutines in Fortran - Stack Overflow
http://stackoverflow.com/questio ... routines-in-fortran
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-7 20:29

Powered by Tencent X3.4

© 2013-2024 Tencent

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