有一个关于在Fortran中返回变长字符串的建议解决方案,来自于这个问题:
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
语句完成后,该值不再需要。(甚至在为连接创建临时变量之后也是如此。)但是对于循环的每次迭代,我们都有不同的函数结果。 - francescalus