我想检查是否已经定义了派生类型中的指针 . 我写了以下简单的代码来向您展示我的问题:
program test
implicit none
type y
real(8), pointer :: x(:)
end type y
type(y), pointer :: w(:)
allocate(w(2))
allocate(w(1)%x(2))
write(*,*) associated(w(1)%x), associated(w(2)%x)
end program test
使用gFortran 4.4.1编译此代码并在Ubuntu上运行它会得到结果:
T F
而在Windows Vista上使用英特尔Fortran编译器11.0编译的相同代码提供:
T T
第一个结果(gFortran)是我实际期待的 . 但是英特尔编译器提供不同结果的事实使我担心我的代码可能不正确 . 我是否在这个例子中做了一些非常错误的指针?有什么想法或解释吗?
非常感谢您的帮助!
1 回答
您正在测试是否关联指针而未在指针上明确使用
nullify
. 关于common Fortran mistakes备注的一个很棒的页面(删除了代码示例):看起来gfortran编译器可能被设置为显式地使声明上的指针无效 - 您应该想到这就像编译器自动将声明的变量设置为零,并且不依赖于该行为 . 如果你想确定,你将自己取消它 .
Edit :
我正在阅读英特尔编译器指南,它指定了如何确保指针无效 - 您可以将派生类型设置为
但请注意,似乎这仅限于Fortran 95,如链接文章中所述 .