我2天前问过这个问题,但是我没有提供足够的信息来解决这个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);
if(monomial[i].member == 2)
monomial[i].value *= -1;
val_sum[monomial[i].degree] += monomial[i].value;
}
return val_sum[degree];
}
当这样调用时:calc_value("8x^9 - 2x = 3 - 2x^5 + 2x^8 + 1.5x^3",9,'x')
输出必须为8,因为它计算9度单项式的值。它在我使用它一次时有效,但在第一次使用后它开始输出-8。
这是我的主要功能:
int main(int argc, char *argv[])
{
string eq = "8x^9 - 2x = 3 - 2x^5 + 2x^8 + 1.5x^3";
cout << calc_value(eq,9,'x') << " ";
cout << calc_value(eq,9,'x') << " ";
cout << calc_value(eq,9,'x');
system("PAUSE");
}
正如我所说,输出是&#34; 8 -8 -8&#34;什么时候应该是&#34; 8 8 8&#34;。
这是完整的&#34;代数&#34;标题(其他2个并不重要):pastebin.com/wcy94zXN
顺便说一句:我检查了重要函数中的每个数组,它们没有溢出,程序在调试模式下运行正常(Code :: Blocks,GCC编译器)。