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
Другие вопросы по тегам