0

我在我的 fortran 代码中遇到了这个奇怪的运行类型错误。我有一个指向用户定义类型 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 中的值。但我无法调用子程序。

4

1 回答 1

0

看起来你已经解决了问题,但只是为了它,“A 型”中的可分配数组是不确定的。直到最近,在许多版本的 FORTRAN90 中都无法在类型定义中包含可分配数组。“已分配”错误是它崩溃时返回的错误。我认为这可能就是为什么你的新编译器工作而旧编译器没有工作的原因。

于 2012-07-18T23:05:50.607 回答