Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内存泄漏、复制构造函数、赋值运算符_C++_Memory Management_Copy Constructor - Fatal编程技术网

C++ 内存泄漏、复制构造函数、赋值运算符

C++ 内存泄漏、复制构造函数、赋值运算符,c++,memory-management,copy-constructor,C++,Memory Management,Copy Constructor,一切都在代码中 这是代码。建造师的 基本上创建的多边形等于0 在这里,我们创建具有给定长度的多边形(它可以高于多边形基) 我想到目前为止一切都很好。 现在复制构造函数: +=操作员 多项式和多项式::运算符+=(常数多项式和a) { 如果(a.base>base) { base=a.base; 系数=(int*)realloc(系数,(基数+1)*sizeof(int)); 对于(unsigned int i=0;i请添加重载+运算符,以便我们提供帮助。此外,当您实现复制/分配构造函数时,您应该

一切都在代码中

这是代码。建造师的

基本上创建的多边形等于0

在这里,我们创建具有给定长度的多边形(它可以高于多边形基) 我想到目前为止一切都很好。 现在复制构造函数:

+=操作员

多项式和多项式::运算符+=(常数多项式和a)
{
如果(a.base>base)
{
base=a.base;
系数=(int*)realloc(系数,(基数+1)*sizeof(int));

对于(unsigned int i=0;i请添加重载+运算符,以便我们提供帮助。此外,当您实现复制/分配构造函数时,您应该注意为系数分配的内存。如果您处理/分配的多项式不是“this”,您应该删除系数是否为
多项式定义了析构函数请发布它,2)赋值运算符很容易实现,使用复制构造函数和析构函数作为辅助工具,没有任何内存泄漏。不需要手动内存管理。@Pawneder另外,如果你的目标是编写多项式类,那么你的目标是内存管理问题。因此,你的目标不是这是一个多项式类,但要真正编写一个自制的
std::vector
类,因为这就是问题的症结所在。@Pawneder,就像我说的,我来这里不是为了让std:vector变得简单——然后放弃它,编写一个真正的vector类。这样,你将1)通过编写这样的类,真正学会正确的内存管理,2)你可以a在多项式类中使用自制类。请添加重载+运算符,以便我们提供帮助。此外,在实现复制/分配构造函数时,应注意为系数分配的内存。如果您处理/分配的多项式不是“this”,您应该删除系数。您是否为
多项式
定义了析构函数?如果是这样,1)请发布它,2)赋值运算符非常简单,使用复制构造函数和析构函数作为辅助工具可以实现,没有任何内存泄漏。不需要手动内存管理。@Pawnder,如果您的目标是编写多边形Nominal类,你的目标被内存管理问题阻止了。所以你的目标不是写一个多项式类,而是真正写一个自制的
std::vector
类,因为这就是问题的根源。@Pawneder就像我说的,我来这里不是为了让std:vector变得简单——那就放弃它,写一个真正的向量cl这样你就可以1)通过编写这样一个类来真正正确地学习内存管理,2)你可以在多项式类中使用自制的类。
 Polynomial::Polynomial()
 {
 base=0;
 Coefficients=new int [base+1];
 Coefficients[0]=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];
 }
 }
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 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;
}