用gfortran编译的神秘相关行为

时间:2016-03-13 19:36:26

标签: fortran

我有以下简短的fortran代码。

  !==============================================
  MODULE PREC
  INTEGER, PARAMETER :: q=8
  END MODULE PREC

  !==============================================
  MODULE MOD_FIT
  USE prec         ! q

  TYPE spec
    INTEGER HL,HR
    COMPLEX(q), POINTER :: HMAT(:,:)   ! (HL,HR)
  END TYPE

  END MODULE MOD_FIT

  !==============================================
  PROGRAM MAIN
  USE prec
  USE MOD_FIT      ! spec
  IMPLICIT NONE
  !
  TYPE(spec) SMP

  write(*,*)'check associated:',associated(SMP%HMAT)

  END

我用最新版本的gfortran编译了它,然后运行它。以下是我得到的内容

检查相关:T

它应该是F,因为我根本没有初始化它吗?

1 个答案:

答案 0 :(得分:3)

不,指针的状态是未定义。您不能使用associated()查询它,因为它可能会产生任何结果。

您应该始终使用所有指针组件的默认初始化并将其初始化为null()

TYPE spec
    COMPLEX(q), POINTER :: HMAT(:,:) => null()
END TYPE

之后,您可以保证获得预期的结果 false