回 帖 发 新 帖 刷新版面

主题:求助一个动态分配数组维数的问题

请教大家一个关于动态分配数组维数的问题
我在主程序中定义了一个未指定维数的数组,然后再子程序中分配数组维数
但老是不对。数组可以在子程序中分配维数吗?请大家指教

我的程序是:
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个回复)

沙发

主程序里的A和子程序的A不一样
主程序的A没有分配 子程序的A已经消亡

板凳


这个用指针数组可以吧?

3 楼

您用的編譯器是什么編譯器呢?

4 楼

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 楼

我用的是ivf十一

6 楼

把A的声明放到一个module里,加上save属性。

7 楼

用最新版本的IVF那么asymtotic兄的代碼就完全OK的。

8 楼

只有用2003的新特性才能在过程中对参数进行动态分配。

我来回复

您尚未登录,请登录后再回复。点此登录或注册