我有以下简短的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,因为我根本没有初始化它吗?
答案 0 :(得分:3)
不,指针的状态是未定义。您不能使用associated()
查询它,因为它可能会产生任何结果。
您应该始终使用所有指针组件的默认初始化并将其初始化为null()
。
TYPE spec
COMPLEX(q), POINTER :: HMAT(:,:) => null()
END TYPE
之后,您可以保证获得预期的结果 false 。