2011-10-21 9 views
1

Visual Studio 2008でヒントの破損の問題がありました。私はWindows 7 64-bitで作業しています。FORTRAN lapackルーチンをインタフェースするときのパラメータの破損

これは私の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!** 

私はすべてを試みましたが、問題を特定できません。誰かが私に問題の位置づけを教えてもらえますか?

ありがとうございました!

+0

'dgetrs'の実際の引数の種類は何ですか? Lapackはパラメータ型の不一致を扱うのに穏やかではありません –

+0

呼び出し側にあるvarsの宣言を追加できますか? –

+0

整数nbParams、one、err;倍精度、ディメンション(:)、ポインタ:: x;倍精度、ディメンション(:, :)、allocatable :: x; allocate(x(nbParams)、stat = err);整数、次元(:)、allocatable :: ipv;次に、私は配列のためのメモリを割り当てます:allocate(a(nbParams、nbParams)、stat = err); allocate(ipv(nbParams)、stat = err); –

答えて

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