首页 文章

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

提问于
浏览
2

我有一个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 回答

  • 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
    
  • -5

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

    来自here

    在过程条目中取消分配与INTENT(OUT)伪参数关联的实际参数的已分配最终可分配组件,以便伪参数的相应组件具有当前未分配的分配状态 . 这确保了指向变量的可分配组件的先前内容的任何指针变为未定义 .

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

相关问题