0

私のFortranコードでこの奇妙なruntypeエラーが発生しています。ユーザー定義タイプBの要素としてユーザー定義タイプAへのポインターがあります。タイプ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 に答える