Fortran Coder

查看: 8114|回复: 4
打印 上一主题 下一主题

[讨论] 内存泄漏问题

[复制链接]

43

帖子

13

主题

0

精华

专家

F 币
435 元
贡献
155 点
跳转到指定楼层
楼主
发表于 2021-5-19 08:43:24 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
看别人的代码中有类似下面一种操作
[Fortran] 纯文本查看 复制代码
integer,allocatable:: a(:,:)
integer:: b(10,20), c(5,15)

b=0
c=0

a=b 
print*, 'shape(a)=',shape(a) !此时a和b形状相同
print*, 'loc(a)=',loc(a)

a=c	!现在a的形状又变成了c,但是没有进行deallocate
	
print*, 'shape(a)=',shape(a)
print*, 'loc(a)=',loc(a)
end


请问这样会导致内存泄露吗?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
5#
发表于 2021-5-20 08:46:18 | 只看该作者
necrohan 发表于 2021-5-20 08:01
不分配内存直接指向已有的数组,这种用法真没见过,我都是规规矩矩的用。 ...

本来FORTRAN所谓的动态数组就是一个数组指针啊,这样用当然是可以
不过,确实还是有可能引起内存泄漏和引用混乱的

250

帖子

2

主题

0

精华

宗师

F 币
1731 元
贡献
872 点

规矩勋章

地板
发表于 2021-5-20 08:01:52 | 只看该作者
不分配内存直接指向已有的数组,这种用法真没见过,我都是规规矩矩的用。

43

帖子

13

主题

0

精华

专家

F 币
435 元
贡献
155 点
板凳
 楼主| 发表于 2021-5-19 18:14:46 | 只看该作者
li913 发表于 2021-5-19 17:57
不会,自动释放旧的。如果内存泄露,第二次会是24G。但实际只有20G。

谢谢你,@li913!
原来Fortran的动态数组还能这样用

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2021-5-19 17:57:24 | 只看该作者
不会,自动释放旧的。如果内存泄露,第二次会是24G。但实际只有20G。

QQ截图20210519175624.png (100.97 KB, 下载次数: 292)

QQ截图20210519175624.png
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-23 18:52

Powered by Tencent X3.4

© 2013-2024 Tencent

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