2015-11-21 37 views
-4

我正在處理有關多項式的分配。其中一項任務是計算兩個多項式的和,並將結果返回給一個新的多項式。但是當我運行程序時,程序自行終止。當我試圖測試哪個部分是錯誤的,似乎創建動態數組的行是錯誤的。我不明白爲什麼,請幫忙。創建動態數組似乎會導致程序終止

這裏是頭文件。

class polynomial 
{ 
private: 
    double* coefficient; 
    int degree; 

public: 
// CONSTRUCTOR member functions 
    polynomial(void); 
    polynomial(int degree, const double* coeff); 
    polynomial(const polynomial& p); 

//DESTRUCTOR member function 
    ~polynomial(void); 

//ACCESSOR member functions 
    void print(void) const; 
    polynomial add(const polynomial& p) const; 
    double evaluate(double x) const; 

//MUTATOR member functions 
    void scale(int scale); 
}; 

這是關於構造函數的cpp文件。

polynomial::polynomial(void) 
{ 
degree = 0; 
coefficient = new double [degree+1]; 
coefficient[0] = 0; 
} 

polynomial::polynomial(const polynomial& p) 
{ 
coefficient = new double [p.degree+1]; 
for (int i = 0; i < p.degree+1; i++) 
coefficient[i] = p.coefficient[i]; 
degree = p.degree; 
} 

polynomial::polynomial(int degree, const double* coeff) 
{ 
coefficient = new double [degree+1]; 
for (int i = 0; i < degree+1; i++) 
    coefficient[i] = coeff[i]; 
polynomial::degree = degree; 
} 

這裏是CPP銼的主要問題是在加載(常量多項式& P)const的一部分。其他人只是爲了更好地理解該計劃。

polynomial polynomial::add(const polynomial& p) const 
{ 
int degree_diff; 
if (degree >= p.degree) 
{ 
    int i; 
    degree_diff = degree - p.degree; 

    polynomial result;  // The program terminates here. 
    result.coefficient = new double[degree+1]; 
    for (i = 0; i < p.degree+1; i++)  
     result.coefficient[i] = coefficient[i] + p.coefficient[i]; 

    while (degree_diff != 0)  
    { 
     result.coefficient[i] = coefficient[i]; 
     degree_diff--; 
     i++; 
    } 

    result.degree = degree; 
    return result; 
} 
else // The case when (degree < p.degree) 
{ 
    int j; 
    degree_diff = p.degree - degree; 
    polynomial result; 
    result.coefficient = new double[p.degree+1]; 
    for (int j = 0; j < degree+1; j++) 
     result.coefficient[j] = coefficient[j] + p.coefficient[j]; 

    while (degree_diff != 0) 
    { 
     result.coefficient[j] = p.coefficient[j]; 
     degree_diff--; 
     j++; 
    } 

    result.degree = p.degree; 
    return result; 
    } 
} 

我找不到爲什麼程序崩潰。請提供幫助。對於多項式「3 * x^5 + 2 * x^3 -x^2 + 7」,Fyi,Eg,其度爲5,係數陣列爲{7.0,0.0,-1.0,2.0,0.0,3.0}

+1

爲什麼不使用std :: vector? –

+1

您不會向我們展示構造函數的實現。爲什麼?這正是您確定崩潰的地步。我們應該如何幫助你,如果你隱藏了該程序的一部分? –

+0

請顯示構造函數的實現。 –

回答

0

崩潰是而不是在您指定的行中。

當您運行通過具有足夠高警告級別編譯這段代碼,你可能會出這樣的消息:

warning C4700: uninitialized local variable 'j' used 

這將指向下面的一行:

int j; 
degree_diff = p.degree - degree; 
polynomial result; 
result.coefficient = new double[p.degree+1]; 
for (int j = 0; j < degree+1; j++) 
    result.coefficient[j] = coefficient[j] + p.coefficient[j]; 

while (degree_diff != 0) 
{ 
    result.coefficient[j] = p.coefficient[j]; // <----- WARNING 
    degree_diff--; 
    j++; 
} 

j未初始化,因爲上述for循環中的j是無關變量,與外部j無關。外部j保持未初始化狀態。這會導致未定義的行爲當您嘗試從使用它作爲數組索引讀取變量時。崩潰只是未定義行爲的一種可能結果; 任何東西都可以發生。

所以,你應該初始化j

int j = 0; // <----- INITIALISED 
degree_diff = p.degree - degree; 
polynomial result; 
result.coefficient = new double[p.degree+1]; 
for (int j = 0; j < degree+1; j++) 
    result.coefficient[j] = coefficient[j] + p.coefficient[j]; 

while (degree_diff != 0) 
{ 
    result.coefficient[j] = p.coefficient[j]; 
    degree_diff--; 
    j++; 
} 

或者你在這兩個循環使用相同的j

int j = 0; // still a good idea 
degree_diff = p.degree - degree; 
polynomial result; 
result.coefficient = new double[p.degree+1]; 
for (j = 0; j < degree+1; j++) // <----- same j 
    result.coefficient[j] = coefficient[j] + p.coefficient[j]; 

while (degree_diff != 0) 
{ 
    result.coefficient[j] = p.coefficient[j]; 
    degree_diff--; 
    j++; 
} 

當然,你的代碼的真正的大問題是你請勿使用std::vector