我在使用 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!**
我已经尝试了所有方法,但无法找到问题所在。有人可以帮我定位问题吗?
谢谢你的帮助!