在计算之前在print语句中使用变量时结果发生更改

时间:2015-10-14 14:21:34

标签: fortran gfortran

我在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语句不应该改变计算结果。

我的问题是:可能导致此类问题的错误是什么?有人有类似的问题吗?

1 个答案:

答案 0 :(得分:3)

这是内存损坏的典型症状。尝试使用“-fcheck = all -Wall -g”进行编译,并修复所有警告和错误。如果这没有帮助,请通过valgrind和/或地址清理程序运行。