用cout解决的奇怪的bug

时间:2015-03-16 22:04:06

标签: c++ heisenbug

这是我第一次看到像这样的bug。我有这个功能:

double calc_value(string equation, int degree, char _for)
{
 string monom[100];
 Monomial monomial[100];
 double val_sum[100];

 memset(val_sum,0,sizeof(val_sum));

 for(int i = 0; i < count_monom(equation); i++)
 {
  monom[i] = obt_mon_from(equation,i);
  monomial[i] = str_to_monomial(equation,i,monom[i],_for);

  //cout << monomial[i].value;

  if(monomial[i].member == 2)
  monomial[i].value *= -1;

  val_sum[monomial[i].degree] += monomial[i].value;
 }

 return val_sum[degree];
}

如果您想知道,此函数是解决方程式的程序的一部分。我无法发布整个代码,因为它大约有600行,但我很确定这个错误在这里(无论如何,如果你需要更多,请告诉我)。

如果我编译这样的代码它会给我一个错误的解决方案,但如果我在第14行取消注释cout然后编译并运行程序它会给我正确的答案。

如果我在调试模式下运行它也会给我正确的答案。

我做了一些研究,我认为程序员称之为heisenbug,但我找不到它。你能帮帮我吗?

顺便说一下,我正在使用Code :: Blocks和GCC编译器。

0 个答案:

没有答案