我在使用英特尔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!**
我尝试了一切,我无法找到问题所在。有人可以帮我找到问题吗?
感谢您的帮助!
答案 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