连接FORTRAN lapack例程时的参数损坏

时间:2011-10-21 13:31:05

标签: heap fortran corruption lapack

我在使用英特尔Fortran编译器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!**

我尝试了一切,我无法找到问题所在。有人可以帮我找到问题吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分: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