所以我一直在开发一个用户输入的多项式类:1x ^ 0 + 2x ^ 1 + 3x ^ 2 ...和1,2,3(系数)存储在一个int数组中
我的重载+和 - 函数工作,但*不起作用。无论输入如何,它始终显示-842150450
什么时候应该是(5x ^ 0 + x ^ 1)*( - 3x ^ 0 + x ^ 1)= -15x ^ 0 + 2x ^ 1 + 1x ^ 2
或(x + 5)(x-3)= x ^ 2 + 2x - 15
我正在使用重载的*函数,如:Polynomial multiply = one * two;
我猜这个问题是strtol(p,& endptr,10),因为它使用了一个long int,然而,加法和减法完美地运作
我的构造函数
Polynomial::Polynomial(char *s)
{
char *string;
string = new char [strlen(s) + 1];
int length = strlen(string);
strcpy(string, s);
char *copy;
copy = new char [length];
strcpy(copy, string);
char *p = strtok(string, " +-");
counter = 0;
while (p)
{
p = strtok(NULL, " +-");
counter++;
}
coefficient = new int[counter];
p = strtok(copy, " +");
int a = 0;
while (p)
{
long int coeff;
char *endptr;
coeff = strtol(p, &endptr, 10); //stops at first non number
if (*p == 'x')
coeff = 1;
coefficient[a] = coeff;
p = strtok(NULL, " +");
a++;
}
}
和重载的*函数
Polynomial Polynomial::operator * (const Polynomial &right)
{
Polynomial temp;
//make coefficient array
int count = (counter + right.counter) - 1;
temp.counter = count;
temp.coefficient = new int [count];
for (int i = 0; i < counter; i++)
{
for (int j = 0; j < right.counter; j++)
temp.coefficient[i+j] += coefficient[i] * right.coefficient[j];
}
return temp;
}
继承我的整个代码:http://pastie.org/721143
答案 0 :(得分:7)
您似乎没有在temp.coefficient[i+j]
中将operator * ()
初始化为零。
temp.coefficient = new int [count];
std::memset (temp.coefficient, 0, count * sizeof(int));
答案 1 :(得分:5)
将-842150450转换为十六进制以找回调试版本中CRT中使用的magic values之一。这有助于在代码中找到错误:
temp.coefficient = new int [count];
// Must initialize the memory
for (int ix = 0; ix < count; ++ix) temp.coefficient[ix] = 0;
还有很多其他的bugz btw,祝你好运。
答案 2 :(得分:1)
确实
temp.coefficient = new int [count];
给你一个零数组?
否则,在你的for循环中,你会把东西添加到垃圾中。
答案 3 :(得分:1)
替换
temp.coefficient = new int [count];
通过
temp.coefficient = new int [count]();
以零值初始化数组值。