我希望有一个小的子程序来制作一个已经分配/定义的指针的重复副本。我有以下测试代码:
implicit none
real ,pointer :: x(:),y(:)
real,target:: px
px=2.02
allocate(x(10))
x=20.0
call copy_1dptr(x,y) !code aborting
write(6,*)'size x is ',size(x)
write(6,*)'y is ',y
end
subroutine copy_1dptr(x,y)
real,pointer:: x(:),y(:)
allocate(y(size(x)))
y=x
end subroutine copy_1dptr
但是,(使用ifort),当我运行它时,我总是遇到中止错误,并显示消息:
forrtl:severe(408):fort:(7):尝试使用指针Y. 与目标无关
似乎,空指针不能像我试图做的那样用作实际的假人。真的吗?对此有任何解决方案吗?
答案 0 :(得分:2)
指针参数需要显式接口。将子程序放在模块中或使其内部:
contains
subroutine copy_1dptr(x,y)
end subroutine
end program