Предлагаемое решение для возврата строки переменной длины в Фортране было из этого вопроса:
function itoa(i) result(res)
character(:),allocatable :: res
integer,intent(in) :: i
character(range(i)+2) :: tmp
write(tmp,'(i0)') i
res = trim(tmp)
end function
Правильно ли я понимаю, что результат этой функции никогда не освобождается?Так что для больших чисел и большого количества вызовов вы можете столкнуться с утечками памяти.
Так что я имею в виду именно тот случай, когда я не назначаю результат своей функции, а использую его «На месте» какв
do i = 1, n
write(*, *) "tmp_"//itoa(i)
end do
у меня явно нет ссылок на результат, по которому я мог бы позвонить deallocate
, и пока я зацикливаюсь, он определенно не выходит за рамки.
Если я понимаюВы (@Francescalus) правильно, я все еще могу рассчитывать на то, что он освобожден.