【发布时间】:2020-08-05 09:06:15
【问题描述】:
我正在尝试在 Fortran 90 中创建一个指针数组,如 here 所述。然后,该数组中的每个指针都与一个浮点数组相关联,在运行时通过取消引用该指针进行分配。请看下面的例子:
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?
【问题讨论】:
-
Fortran 问题请使用标签fortran,此外,几十年来(自 Fortran 90 以来)该语言一直被称为 Fortran,而不是 FORTRAN。
-
这两个答案都很好地描述了您的错误。作为进一步的评论,如果可能的话,您应该避免使用指针。而且,是的,我知道链接列表和队列之类的东西需要指针。
标签: fortran