2012-05-11 311 views
1
#include<iostream> 
#include"polynom.h" 
using namespace std; 

// operator= works !!! 

int main() 
{ 
    Polynomial p(5), q(5), r(5); 
    cout<<"1"<<endl; 
    cin>>x; 

    p[0] = 1; 
    p[1] = 2; 
    p[2] = 3; 

    q[0] = 4; 
    q[1] = 5; 
    q[2] = 6; 

    cout<<p+q; 
    return 0; 
} 


Polynomial::Polynomial(const Polynomial &copyConstructor) : size(copyConstructor.size) 
{ 
    coeffs = new double(size); 

    int i=0; 
    while(i<size) 
    { 
     coeffs[i] = copyConstructor.coeffs[i]; 
     i++; 
    } 
} 


Polynomial::Polynomial(int s) 
{ 
    size = s; 
    coeffs = new double [s]; 

    // Setting all coefficients in the polynomial equal to 0 
    for(int i=0; i<size; i++) 
     coeffs[i]=0; 
} 



Polynomial Polynomial::operator+ (const Polynomial &rightPoly) const 
{ 

    int BigSize, SmallSize; 
    Polynomial *newPoly = NULL; 

    cout<<"in the operator\n"; 

    if(size == rightPoly.size) 
    { 
     cout<<"first if\n"; 
     newPoly = new Polynomial(size); 

     cout<<"first if resize\n"; 
     for(int i=0; i<newPoly->size; i++) 
      cout<<newPoly->coeffs[i]<<endl; 
     cout<<"size = "<<size<<endl; 
     cout<<"rightPoly.size = "<<rightPoly.size<<endl; 
     cout<<"newPoly->size = "<<newPoly->size<<endl; 

     cout<<"first if loop\n"; 
     for(int i=0; i<size; i++) 
     { 
      cout<<"i= "<<i; 
      newPoly->coeffs[i] = rightPoly.coeffs[i]+coeffs[i]; 
      cout<<" newPoly[]"<<newPoly->coeffs[i]<<endl; 
     } 
     cout<<"out of loop\n"<<endl; 
    } 


    else if(size > rightPoly.size) 
    { 
     cout<<"second if\n"; 
     BigSize = size; 
     SmallSize = rightPoly.size; 

     newPoly = new Polynomial(BigSize); 

     cout<<"second if loop\n"; 
     for(int i=0; i<SmallSize; i++) 
      newPoly->coeffs[i] = rightPoly.coeffs[i] + coeffs[i]; 
     for(int i=SmallSize; i<BigSize; i++) 
      newPoly->coeffs[i] = coeffs[i]; 
     cout<<"second if loop end\n"; 
    } 

    else 
    { 
     cout<<"third if\n"; 
     BigSize = rightPoly.size; 
     SmallSize = size; 

     newPoly = new Polynomial(BigSize); 

     for(int i=0; i<SmallSize; i++) 
      newPoly->coeffs[i] = coeffs[i] + rightPoly.coeffs[i]; 
     for(int i=SmallSize; i<BigSize; i++) 
      newPoly->coeffs[i] = rightPoly.coeffs[i]; 
    } 

    cout<<"before return\n"; 
    return *newPoly;  
} 

問題: 當Visual Studio 2010執行p + q行時,會出現以下錯誤。 p和q具有相同的大小,並且它們被正確初始化(我檢查了它們)。C++:運算符重載,運算符+

Windows has triggered a breakpoint in CNG242.exe. 
This may be due to a corruption of the heap, which indicates a bug in CNG242.exe or any of the DLLs it has loaded. 
This may also be due to the user pressing F12 while CNG242.exe has focus. 
The output window may have more diagnostic information. 

我添加了評論爲了跟隨線條並找出問題所在。我沒有得到導致錯誤的原因?

+4

我沒有看到'p + q'行。 –

+0

你的類是否有適當的拷貝構造函數? –

+0

確保您遵循三項規則。 –

回答

0

您溢出堆塊

coeffs = new double(size); // You allocated memory for only one double variable 

這種方式。

2

表達

coeffs = new double(size); 

一個double變量分配空間,初始化其值size,並返回指針coeffs。你可能想要的是:

coeffs = new double[size]; 

注意方括號。這將爲size雙精度初始化空間,並不會將它們初始化爲任何特定值,並將指向第一個的指針返回至coeffs