这是我第一次看到像这样的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编译器。