Pointers fortran 90递归子程序指针

Pointers fortran 90递归子程序指针,pointers,recursion,memory-leaks,fortran,fortran90,Pointers,Recursion,Memory Leaks,Fortran,Fortran90,我有一个子例程,我希望被递归调用,但调用它时似乎存在内存泄漏。我已经发布了关于函数内存泄漏的问题 但现在我有了一个新问题。我已经将所有函数都切换到了子例程,现在递归调用子例程时遇到了问题。这是我的代码(对不起,不短) 在主程序中,我有 do k=1,10**4 call myCurl3DRTest(f3,u,v,w,gd,1) !!调用myCurl(f3、u、v、w、gd) 恩多 正如我在前面关于内存泄漏的问题中提到的,这也导致了内存泄漏。有什么东西我忘了分配吗?还是说cu

我有一个子例程,我希望被递归调用,但调用它时似乎存在内存泄漏。我已经发布了关于函数内存泄漏的问题

但现在我有了一个新问题。我已经将所有函数都切换到了子例程,现在递归调用子例程时遇到了问题。这是我的代码(对不起,不短)

在主程序中,我有

   do k=1,10**4
     call myCurl3DRTest(f3,u,v,w,gd,1)
!!调用myCurl(f3、u、v、w、gd) 恩多

正如我在前面关于内存泄漏的问题中提到的,这也导致了内存泄漏。有什么东西我忘了分配吗?还是说curlx、curly和curlz没有从每一个级别上取消分配

很清楚,在deleteField中:

   subroutine deleteField(this)
     implicit none
     type(vecField3D),intent(inout) :: this
     if (associated(this%x)) deallocate(this%x)
     if (associated(this%y)) deallocate(this%y)
     if (associated(this%z)) deallocate(this%z)
     this%TFx = .false.
     this%TFy = .false.
     this%TFz = .false.
   end subroutine
在空字段中:

   subroutine nullifyField(this)
     implicit none
     type(vecField3D),intent(inout) :: this
     nullify(this%x); this%TFx = .false.
     nullify(this%y); this%TFy = .false.
     nullify(this%z); this%TFz = .false.
     this%TFNullified = .true.
   end subroutine

非常感谢您的帮助

我根据您之前的文章猜测,在setX(和类似的)过程中,您分配了作为第一个参数传递的
d3
对象的一些指针组件。我看不出在循环的下一次迭代之前,或者在嵌套调用
myCurl3DRTest
之前,如何通过释放来匹配这些指针分配。根据您试图执行的操作,这些释放可能通过调用
nullifyField
提供

如果我的猜测是正确的,那么如果没有这些释放,您将有内存泄漏


Fortran 95的语言级别加上可分配的TR将使您的生活变得更加轻松…

是的,结果证明在其中一个子例程中没有取消分配。。我想迁移到F95,我可能。。
   subroutine nullifyField(this)
     implicit none
     type(vecField3D),intent(inout) :: this
     nullify(this%x); this%TFx = .false.
     nullify(this%y); this%TFy = .false.
     nullify(this%z); this%TFz = .false.
     this%TFNullified = .true.
   end subroutine