Я пытаюсь создать массив указателей в Fortran 90, как описано здесь . Каждый указатель в этом массиве затем связывается с массивом чисел с плавающей запятой, который должен быть выделен во время выполнения путем разыменования указателя. См. Пример ниже:
program test
type ptr
double precision, pointer :: p(:)
end type ptr
integer :: i, n=5
type(ptr), dimension(3) :: ptrs
double precision, pointer :: a(:), b(:), c(:)
ptrs(1)%p => a
ptrs(2)%p => b
ptrs(3)%p => c
do i=1,3
allocate(ptrs(i)%p(n))
ptrs(i)%p = 0d0
enddo
write(6, *) ptrs(1)%p
write(6, *) a
end program test
Результат:
$ gfortran -o test test.f90 && ./test
0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
At line 20 of file test.f90 (unit = 6, file = 'stdout')
Internal Error: list_formatted_write(): Bad type
Ошибка выдается, потому что a
не выделено. В идеальном мире ptrs(1)%p
и a
должны быть идентичны, но, очевидно, этот мир несовершенен. Мой вопрос: Как правильно распределить a
, b
и c
?