Fortran Coder

标题: 内存泄漏问题 [打印本页]

作者: 愤怒的三炮    时间: 2021-5-19 08:43
标题: 内存泄漏问题
看别人的代码中有类似下面一种操作
[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


请问这样会导致内存泄露吗?

作者: li913    时间: 2021-5-19 17:57
不会,自动释放旧的。如果内存泄露,第二次会是24G。但实际只有20G。

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

QQ截图20210519175624.png

作者: 愤怒的三炮    时间: 2021-5-19 18:14
li913 发表于 2021-5-19 17:57
不会,自动释放旧的。如果内存泄露,第二次会是24G。但实际只有20G。

谢谢你,@li913!
原来Fortran的动态数组还能这样用
作者: necrohan    时间: 2021-5-20 08:01
不分配内存直接指向已有的数组,这种用法真没见过,我都是规规矩矩的用。
作者: liudy02    时间: 2021-5-20 08:46
necrohan 发表于 2021-5-20 08:01
不分配内存直接指向已有的数组,这种用法真没见过,我都是规规矩矩的用。 ...

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




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2