主题:求助一个动态分配数组维数的问题
zklscsd
[专家分:0] 发布于 2010-09-30 18:57:00
请教大家一个关于动态分配数组维数的问题
我在主程序中定义了一个未指定维数的数组,然后再子程序中分配数组维数
但老是不对。数组可以在子程序中分配维数吗?请大家指教
我的程序是:
PROGRAM test
IMPLICIT none
INTEGER i
INTEGER,ALLOCATABLE,DIMENSION(:)::A
CALL s(A)
WRITE(*,*)A(1)
END PROGRAM test
SUBROUTINE s(A)
INTEGER i
INTEGER,ALLOCATABLE,DIMENSION(:)::A
i=5
ALLOCATE(A(i))
A=(/1,2,3,4,5/)
RETURN
END
回复列表 (共8个回复)
沙发
dongyuanxun [专家分:7180] 发布于 2010-09-30 19:23:00
主程序里的A和子程序的A不一样
主程序的A没有分配 子程序的A已经消亡
板凳
cepheid [专家分:70] 发布于 2010-09-30 22:16:00
这个用指针数组可以吧?
3 楼
cgl_lgs [专家分:21040] 发布于 2010-09-30 22:52:00
您用的編譯器是什么編譯器呢?
4 楼
asymptotic [专家分:16630] 发布于 2010-09-30 22:52:00
Fortran 2003 Standard -- allocatable dummy argument --> explicit interface is needed.
subroutine test
implicit none
integer:: i
integer, allocatable:: a(:)
call s(a)
do i = 1, size(a, 1), 1
write(unit = *, fmt = *) i, a(i)
end do ! i
return
contains
subroutine s(a)
integer i
integer, allocatable:: a(:)
i = 5
allocate( a(i) )
a=(/1, 2, 3, 4, 5/)
return
end subroutine
end subroutine
5 楼
zklscsd [专家分:0] 发布于 2010-10-07 22:42:00
我用的是ivf十一
6 楼
BiCGSTAB [专家分:780] 发布于 2010-10-10 08:47:00
把A的声明放到一个module里,加上save属性。
7 楼
cgl_lgs [专家分:21040] 发布于 2010-10-10 20:45:00
用最新版本的IVF那么asymtotic兄的代碼就完全OK的。
8 楼
prolee2008 [专家分:30] 发布于 2010-10-11 01:22:00
只有用2003的新特性才能在过程中对参数进行动态分配。
我来回复