我在fortran子例程中有一个奇怪的行为,如下所示:
subroutine compute(a, b, c)
real(8), dimension(:,:), intent(in) :: a
real(8), dimension(:), intent(in) :: b
real(8), dimension(:), intent(in out) :: c
!print*, c
! do some computation here to update c
end subroutine compute
如果我取消注释print语句,我会得到预期的结果。如果我对它进行评论,那么结果就会变得非常奇怪。顺便说一句,print语句只是出于调试目的。奇怪的是,它解决了#34;问题,但这不是一个可靠的解决方案。子例程是大型代码的一部分,我还没有能够从大型代码的上下文中解决问题。调试器没有多大帮助。很明显,问题出在其他地方,因为print语句不应该改变计算结果。
我的问题是:可能导致此类问题的错误是什么?有人有类似的问题吗?
答案 0 :(得分:3)
这是内存损坏的典型症状。尝试使用“-fcheck = all -Wall -g”进行编译,并修复所有警告和错误。如果这没有帮助,请通过valgrind和/或地址清理程序运行。