为什么我的数组不再分配在子程序中?

时间:2011-10-25 03:27:49

标签: fortran

我有一个Fortran类型,它有一个类型的条目。此类型具有可分配的整数数组:

type inner
    integer, allocatable :: dyn_arr(:)
    integer another_var
end type
type outer
    type(inner) entry
    type(inner) another_entry
end type

我分配数组然后调用子程序。在子程序中我想访问数组。

type(outer) main_struct

allocate(main_struct%entry%dyn_arr(100))
call routi(main_struct)

我的代码段错误。当我使用调试器运行时,在调用之前一切正常,当我进入子例程routi时,调试器说dyn_arr没有被分配。怎么会这样?

2 个答案:

答案 0 :(得分:2)

我创建了一个简短的程序来测试它并且没有任何问题。你能发一个显示这个失败的简短程序吗?

这是我使用gfortran 4.5编译时运行良好的代码:

  MODULE temp_module
    TYPE inner
       INTEGER, ALLOCATABLE :: dyn_arr(:)
       INTEGER another_var
    END TYPE inner
    TYPE outer
       TYPE(inner) entry
       TYPE(inner) another_entry
    END TYPE outer
  CONTAINS

    SUBROUTINE test (input)
      TYPE(outer), INTENT(in) :: input
      WRITE(*,*) input%entry%dyn_arr
    END SUBROUTINE test

  END MODULE temp_module

  PROGRAM XC_VMEC_SIGHTLINE
    USE temp_module
    TYPE(outer) main_struct

    ALLOCATE(main_struct%entry%dyn_arr(10))
    CALL test(main_struct)
  END PROGRAM XC_VMEC_SIGHTLINE

答案 1 :(得分:-5)

我想在routi()中你有意图(out),不是吗?

来自here

  

实际参数的已分配最终可分配组件   与取消分配的INTENT(OUT)伪参数关联   程序入口使虚拟对应的组件   参数的分配状态目前尚未分配。

     

这确保了指向前一个内容的任何指针   变量的可分配组件变为未定义。

永远不要使用意图(out)。这是邪恶的。