Функция завершения Fortran не работает, когда тип является массивом

Недавно я обнаружил серьезную проблему в том, что в некоторых случаях функция финализации не работает.

Описание:

Я определил тип, скажем TYPE(testtype):: T, в котором используется много указателей и размещаемых массивов. И есть подпрограмма завершения, скажем, final:: de, Эта функция (de) работает нормально (я поставил написать в нем, чтобы проверить это). Тем не менее, когда я определяю массив 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)

0 ответов

Другие вопросы по тегам