【发布时间】:2019-03-08 16:41:39
【问题描述】:
在 Fortran 中返回可变长度字符串的建议解决方案来自 this 问题:
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) 的理解正确,我仍然可以相信它已被释放。
【问题讨论】:
-
在本例中使用:
write语句完成后不再需要该值。 (也许甚至在创建了一个临时的连接之后。)但是对于循环的每次迭代,我们都有不同的函数结果。
标签: string function memory-leaks fortran