最近我发现一个严重的问题是在某些情况下finalization 功能不起作用。
描述:
我定义了一个类型,比如说TYPE(testtype):: T
,其中使用了许多指针和可分配数组。还有一个终结子程序,比如说final:: de
。这个函数 ( de
) 工作正常(我把 write 放进去检查)。但是,当我定义一个数组时 TYPE(testtype),allocatable::T(:)
,在我完成使用它后,函数de
不会在我调用deallocate(T)
。这里我放上测试代码。可以检查,subdo1()
运行良好(输出"work"
),而最终输入subdo2()
失败。
module test1
implicit none
!--------------
type testtype
real(8)::x
contains
final::de
end type
!--------------
contains
subroutine de(self)
type(testtype)::self
write(*,*)"work"
end subroutine
end module
subroutine subdo1()
use test1
implicit none
class(testtype),pointer::t
allocate(t)
deallocate(t)
end subroutine
subroutine subdo2()
use test1
implicit none
class(testtype),pointer::t(:)
allocate(t(2))
deallocate(t)
end subroutine
program test
implicit none
!call subdo1()
call subdo2()
end program
我尝试了 gfortran 和 ifort(ifort 版本 17.0.0)