Я читал в этом руководстве, что размещаемые переменные автоматически освобождаются, когда они выходят за пределы области видимости. Я написал пробную программу, чтобы проверить это, и обнаружил, что valgrind сообщает об утечке памяти. Моя пробная программа:
program arrays
use, intrinsic :: iso_fortran_env, only: prec=>real64
implicit none
integer, allocatable :: array_1(:)
integer, allocatable :: array_2(:,:)
allocate(array_1(10))
allocate(array_2(10,10))
end program arrays
Я скомпилировал эту программу (arrays.f90) следующим образом (версия gfortran GNU Fortran (Ubuntu 5.5.0-12ubuntu1~16.04) 5.5.0 20171010)
gfortran -g -std=f2008 arrays.f90 -o arr
Затем запустив valgrind (valgrind ./arr), я нахожу
==13293== HEAP SUMMARY:
==13293== in use at exit: 440 bytes in 2 blocks
==13293== total heap usage: 21 allocs, 19 frees, 12,280 bytes allocated
==13293==
==13293== LEAK SUMMARY:
==13293== definitely lost: 440 bytes in 2 blocks
==13293== indirectly lost: 0 bytes in 0 blocks
==13293== possibly lost: 0 bytes in 0 blocks
==13293== still reachable: 0 bytes in 0 blocks
==13293== suppressed: 0 bytes in 0 blocks
==13293== Rerun with --leak-check=full to see details of leaked memory
Я не понимаю, почему valgrind говорит, что два массива не освобождаются после завершения программы.
Вывод valgrid не зависит от уровня оптимизации используемого компилятора, в отличие от этот вопрос об утечках памяти в фортране.