我有一个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
没有被分配。怎么会这样?
答案 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)。这是邪恶的。