0

Intel Fortran Compiler 11 を使用した Visual Studio 2008 でヒープ破損の問題が発生しました。Windows 7 64 ビットで作業しています。

これは、私の F90 プログラムでの (F77) lapack サブルーチンの呼び出しです。

  call dgetrs('N', nbParams, one, a, nbParams, ipv, x, nbParams, err)

この呼び出しの前に、デバッガーはすべてのパラメーターの期待値を表示します。a と x は、それぞれサイズが (nbParams,nbParams) と (nbParams) の 2 つの「割り当て可能な」変数を表します。

ただし、この行を実行した後、アクセス違反の読み取り位置 0x0000000000000001 で実行が停止します。lapack をデバッグ モードでコンパイルしたので、呼び出しの内部に入ることができます。DGETRS の最初のステートメントだけで、'TRANS' 以外のすべてが壊れていることがわかります。

  SUBROUTINE DGETRS( TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
  ...
  CHARACTER          TRANS
  INTEGER            INFO, LDA, LDB, N, NRHS
  ...
  INTEGER            IPIV( * )
  DOUBLE PRECISION   A( LDA, * ), B( LDB, * )
  ......
  INFO = 0     **--> Now all input vars but TRANS are corrupted or dereferenced!**

私はすべてを試しましたが、問題を特定できません。問題を特定するのを手伝ってくれる人はいますか?

ご協力いただきありがとうございます!

4

1 に答える 1

0

この種の問題は通常、インターフェイスなしで想定される形状配列を使用する場合に発生します。次のようなインターフェースを宣言してみてください。

INTERFACE
   SUBROUTINE DGETRS( TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
    CHARACTER          TRANS
    INTEGER            INFO, LDA, LDB, N, NRHS
    INTEGER            IPIV( * )
    DOUBLE PRECISION   A( LDA, * ), B( LDB, * )
  END SUBROUTINE
END INTERFACE
于 2012-02-28T08:32:24.860 に答える