fortran: как передать нулевой указатель на подпрограмму, в которой он будет определен и возвращен
Я хочу иметь небольшую подпрограмму для создания дублированной копии указателя, который уже выделен / определен. У меня есть следующий тестовый код:
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: Серьезный (408): Форт: (7): Попытка использовать указатель Y, когда он не связан с целью
Кажется, нулевой указатель не может быть использован как фактическая пустышка, как то, что я пытался сделать. Это правда? Есть ли решение для этого.
1 ответ
Решение
Аргументы указателя требуют явного интерфейса. Поместите подпрограмму в модуль или сделайте ее внутренней:
contains
subroutine copy_1dptr(x,y)
end subroutine
end program