我的fortran代码中出现了这种奇怪的runtype错误。我有一个指向用户定义类型A的指针作为用户定义类型B的元素。当我从类型B中的过程调用与类型A关联的过程时,我得到已分配的数组已分配的运行时错误。有人看到过这个错误吗?
抱歉无法显示代码。但这里大概是发生了什么。
type B
type(A),pointer :: obj
contains
procedure :: do_something
end type B
type A
integer,allocatable:: long_array(:)
contains
procedure :: do_something_to_long_array
end type A
program main
type(B) :: obj1
type(A) ,target :: obj2
allocate(obj2%long_array(10))
obj1%obj=>obj2
call obj1%obj%do_something_to_long_array()
end program main
对do_something_to_long_array的调用给了我这个错误。该过程在我的代码中实现,并在直接在对象上调用时工作。我也能够访问long_array中的值。但是我无法调用子程序。
答案 0 :(得分:0)
看起来你已经解决了问题,但就其而言,“类型A”中的可分配数组是不确定的。直到最近,在许多版本的FORTRAN90中都无法在类型定义中使用可分配数组。并且“已经分配”的错误是崩溃时返回的错误。我认为这可能是你的新编译器工作的原因,而旧的编译器没有。