Действительно, освобождение освобождает память, занятую переменными, но не всегда вам нужно делать это вручную.
Если вы знаете, что вам больше не нужно содержимое переменной И вам нужно освободитьпамяти для других переменных, которые должны быть выделены (или для системы), вы можете использовать оператор deallocate
.
Однако освобождение происходит автоматически, когда переменная выходит из области видимости (Fortran 95 или более поздняя версия, как указано@francescalus) или когда вы достигнете конца программы.
Кроме того, освобождение происходит автоматически, когда это необходимо, перед присваиванием, если размеры массива не совпадают или если переменная полиморфна и должна принимать согласованнуюдинамический тип.(Это поведение Fortran2003 или новее, и может потребоваться включить его на некоторых компиляторах.)
Более того, когда фактический аргумент связан с аргументом фиктивного аргумента, который имеет атрибут INTENT(OUT)
, происходит освобождениеперед вводом процедуры.
** Предупреждение для переменных-указателей : **
Если вы явно выделили хранилище для переменной pointer
(с помощью оператора allocate
), и после этого вы выполняете привязку указателя (=>
), освобождение не происходит автоматически.Вы несете ответственность за освобождение переменной перед ее выполнением, иначе произойдет утечка памяти.
В качестве последнего замечания, попытка освободить переменную, которая не была выделена, приводит к ошибке.Вы можете проверить, выделяется ли выделяемая переменная с помощью встроенной функции allocated
.