内存泄漏,复制构造函数,赋值运算符

时间:2017-03-26 14:41:50

标签: c++ memory-management copy-constructor

Everthing在代码中

这是代码。构造的。

 Polynomial::Polynomial()
 {
 base=0;
 Coefficients=new int [base+1];
 Coefficients[0]=0;
 }   

基本上创建Poly等于0;

 Polynomial::Polynomial(const unsigned int length,const int* table)
 {
 base=length;
 bool a=false;

 for(int i=length;i>=0;i--)
 {
 if(table[i]==1&&a==false)
 {
 a=true;

 Coefficients=new int[base+1];
 };

 if(table[i]==0&&a==false)
 {
 base--;
 };
 if(a==true)
 Coefficients[i]=table[i];
 }
 }

这里我们创建具有给定长度的Poly(它可以高于Poly base) 我认为到目前为止一切正常。 现在复制构造函数:

Polynomial::Polynomial(const Polynomial& P)
{

base = P.base;
Coefficients=new int[base+1];
for(unsigned int i=0; i<base+1;i++)
{
Coefficients[i]=P.Coefficients[i];
}
}

并指定运营商:

Polynomial& Polynomial::operator =(const Polynomial &P)
{

base=P.base;
for(unsigned int i=0;i<P.base+1;i++)
Coefficients[i]= P.Coefficients[i];

return *this;
}

我认为这有什么不对,因为当我重载+运算符并创建了Polynomial a,u,v; 当我输入a = v + u; 有时我有垃圾值和“进程返回-1073741819(0xC0000005)” 我已经阅读了一些有关切换/复制的内容,但我的代码中是否有简单的解决方案,我不知道?

Polynomial operator +(const Polynomial& a,const Polynomial& b)
{
Polynomial c;
if(a.base>=b.base)
    c.base=a.base;

    else
        c.base=b.base;

c.Coefficients=new int[c.base+1];
for(unsigned int i=0;i<c.base+1;i++)
{
c.Coefficients[i]=0;
};
for(unsigned int i=0;i<b.base+1;i++)
{
c.Coefficients[i]=b.Coefficients[i];

};
for(unsigned int i=0;i<a.base+1;i++)
{
c.Coefficients[i]+=a.Coefficients[i];

}
return c;
}

这是析构函数

Polynomial::~Polynomial()
{
delete []Coefficients;

}

+ =运营商

Polynomial& Polynomial::operator +=(const Polynomial& a)
{
if(a.base>base)
   {

base=a.base;
Coefficients = (int*)realloc(Coefficients, (base+1)*sizeof(int));



for(unsigned int i=0;i<base+1;i++)
{
    if(Coefficients[i]!=0&&Coefficients[i]!=1)
    {
        Coefficients[i]=0;
    }

 Coefficients[i]+=a.Coefficients[i];


 }
   }
   if(a.base<=base)
     {

for(unsigned int i=0;i<a.base+1;i++)
{
Coefficients[i]+=a.Coefficients[i];

}
}
return *this;
}

0 个答案:

没有答案