Fortran Coder

楼主: andy8496
打印 上一主题 下一主题

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

[复制链接]

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

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

11#
发表于 2015-4-17 08:25:01 | 只看该作者
正如之前我说过的那样,这是具体编译器实现的问题。你要想深究为什么,恐怕只能反汇编分析。

正如 pasuka 所言,gfortran 是 OK的,所以不同编译器实现不一样。

同一个编译器,Debug 和 Release 的具体实现也不一样。我不认为研究这个问题有什么意义。

还是那句话:“即便不使用DLL,合理的规范的做法是:谁分配,谁释放”,尤其做大一些的工程时候,这不止是避免程序上出错,也可避免逻辑上出错。而后者非常重要。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

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

12#
发表于 2015-4-17 08:55:44 | 只看该作者
fcode 发表于 2015-4-17 08:25
正如之前我说过的那样,这是具体编译器实现的问题。你要想深究为什么,恐怕只能反汇编分析。

正如 pasuka  ...

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

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

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

13#
发表于 2015-4-17 09:52:42 | 只看该作者
pasuka 发表于 2015-4-17 08:55
可分配数组传入子程序后在进行内存分配好像是F08新特性,有可能lz的IVF版本低,所以不支持?!
此外就是D ...

这是 F2003 特征,IVF是予以支持的。很早就支持了。这个不存在问题。

但是这个特征需要 interface,如果不再同一个module里,可能要单独书写 interface

123

帖子

32

主题

0

精华

宗师

F 币
1562 元
贡献
795 点
14#
 楼主| 发表于 2015-4-18 11:30:40 | 只看该作者
fcode 发表于 2015-4-17 08:25
正如之前我说过的那样,这是具体编译器实现的问题。你要想深究为什么,恐怕只能反汇编分析。

正如 pasuka  ...

只是因为以前的开发习惯不好,用了很多这样的方式:Dll中分配,main.exe中释放,main.exe中open, dll中write,现在都出问题了。之前没用dll,所以好好的。看来只能改代码了。

非常感谢二位的耐心帮助!

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

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

15#
发表于 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

123

帖子

32

主题

0

精华

宗师

F 币
1562 元
贡献
795 点
16#
 楼主| 发表于 2015-4-20 18:58:27 | 只看该作者
我用的VS2010+IVF2011。可变长度数组做参数这个好像没有问题。只是用完后释放有问题。同时还有open、write的问题。
已经按照fcode的建议改了代码了。

谢谢大家了!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-5 02:36

Powered by Tencent X3.4

© 2013-2024 Tencent

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