我想知道以下代码对记忆的作用:
program A
While (t < large number)
allocate(a)
...
end program
“allocate(a)”是否在每次迭代中指代相同的内存位置,如果未使用程序结束前的 deallocate(a),是否存在内存泄漏?
我想知道以下代码对记忆的作用:
program A
While (t < large number)
allocate(a)
...
end program
“allocate(a)”是否在每次迭代中指代相同的内存位置,如果未使用程序结束前的 deallocate(a),是否存在内存泄漏?
答案是分配一个已经分配的项是错误的,所以这个代码示例是错误的。
如果项目被声明为allocatable
. 他们没有注意到该项目是否使用该pointer
属性声明。在这种情况下,您会发生内存泄漏,因为内存已在早期迭代中保留,但由于指针已被重用,因此不再有办法访问它。
要回答您的另一个问题,不可能用allocatable
对象泄漏内存。例如,具有本地范围的可分配数组在到达时被释放,return
或者end
(除非它们被保存),可分配类型组件与它们的父级一起自动释放,等等。
在程序结束之前不释放对象并不是真正意义上的不可寻址内存泄漏,因为您的程序在执行期间仍然可以访问它。Valgrind 会将此内存报告为“仍可访问”。您可能认为释放此类对象的方式更好,但您不需要这样做。