【发布时间】:2012-10-15 01:19:57
【问题描述】:
以下代码返回分段错误,因为我尝试传递的可分配数组没有被正确识别(大小返回 1,而它应该是 3)。在此页面 (http://www.eng-tips.com/viewthread.cfm?qid=170599) 中,一个类似的示例似乎表明它在 F95 中应该可以正常工作;我的代码文件扩展名为 .F90,但我尝试将其更改为 F95,并且我正在使用 gfortran 进行编译。
我的猜测是问题应该出在我将可分配数组传递给子程序的方式上;我做错了什么?
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
PROGRAM test
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
IMPLICIT NONE
DOUBLE PRECISION,ALLOCATABLE :: Array(:,:)
INTEGER :: iii,jjj
ALLOCATE(Array(3,3))
DO iii=1,3
DO jjj=1,3
Array(iii,jjj)=iii+jjj
PRINT*,Array(iii,jjj)
ENDDO
ENDDO
CALL Subtest(Array)
END PROGRAM
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
SUBROUTINE Subtest(Array)
DOUBLE PRECISION,ALLOCATABLE,INTENT(IN) :: Array(:,:)
INTEGER :: iii,jjj
PRINT*,SIZE(Array,1),SIZE(Array,2)
DO iii=1,SIZE(Array,1)
DO jjj=1,SIZE(Array,2)
PRINT*,Array(iii,jjj)
ENDDO
ENDDO
END SUBROUTINE
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
【问题讨论】:
-
请注意,可分配的虚拟参数实际上是 Fortran 2003 的一项(广泛支持 - 包括 gfortran 已有几年)功能。
标签: arrays fortran fortran90 gfortran