Если я скомпилирую этот код:
(файл bar.f90)
program bar
use foo
real :: array(5,5) ! get max size from other means, so to have enough space
integer :: i
array = getArray()
! leaking memory here ? unexpected behavior ?
end program
(файл foo.f90)
module foo
contains
function getArray()
real, allocatable :: getArray(:,:)
integer :: length
integer :: i
length = 5 ! coming, for example, from disk
allocate(getArray(length,length))
do i=1,length
getArray(i,:) = 10.0*i
enddo
! cannot call deallocate() or a crash occurs
end function
end module
с использованием ifort -debug foo.f90 bar.f90
и пусть valgrind проверит исполняемый файл, все выглядит нормально:
valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 ./a.out
==8019== Memcheck, a memory error detector
==8019== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==8019== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info
==8019== Command: ./a.out
==8019==
==8019==
==8019== HEAP SUMMARY:
==8019== in use at exit: 0 bytes in 0 blocks
==8019== total heap usage: 2 allocs, 2 frees, 108 bytes allocated
==8019==
==8019== All heap blocks were freed -- no leaks are possible
==8019==
==8019== For counts of detected and suppressed errors, rerun with: -v
==8019== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 17 from 6)
Возможно, скоро кто-то с гораздо большим опытом ответит;Надеюсь, это пока подойдет.