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) 的两个“可分配”变量。

但是,运行此行后,执行将停止,并出现访问冲突读取位置 0x0000000000000001。由于我在调试模式下编译了 lapack,我可以进入调用内部,并且我看到除了“TRANS”之外的所有内容都在 DGETRS 的第一条语句中被破坏。

  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 回答