【发布时间】:2014-10-08 04:43:50
【问题描述】:
当我通过 gfortran 和 Valgrind 或 ifort 和 Intel Inspector 运行以下代码时,第一次为对象调用过程 set 时检测到内存泄漏。不过,第二次似乎不会导致任何内存泄漏。这是为什么呢?
module mymod
implicit none
type mytype
integer, pointer :: intArray(:) => null()
contains
procedure :: set
end type mytype
contains
subroutine set(this, intArray)
class(mytype), intent(inout) :: this
integer, intent(in) :: intArray(:)
integer n
n = size(intArray)
nullify(this%intArray)
allocate(this%intArray(n)) !line 20
this%intArray = intArray
end subroutine set
end module mymod
program main
use mymod !line 28
implicit none
type(mytype) :: myvar
call myvar%set((/1,2,3/)) !line 33
print *, myvar%intArray
call myvar%set((/9,8,7,6,5/))
print *, myvar%intArray
end program main
Valgrind 报告以下内存泄漏:
==6669== 12 bytes in 1 blocks are definitely lost in loss record 1 of 2
==6669== at 0x402BB7A: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==6669== by 0x804886A: __mymod_MOD_set (main.f90:20)
==6669== by 0x8048988: MAIN__ (main.f90:33)
==6669== by 0x8048ADC: main (main.f90:28)
行号见代码中的cmets。
【问题讨论】:
标签: memory-leaks fortran