当operator =方法被称为C ++时抛出std :: bad_alloc异常

时间:2015-03-09 17:50:46

标签: c++ dynamic-memory-allocation bad-alloc

我正在用C ++编写我的第一个类,这是一个多项式,并且在执行时遇到了一个bad_alloc异常

P=Q; //(P,Q being polynomials)

我认为bad_alloc被抛出的事实(有时候进程以-1073741819状态终止)与内存已满的事实没什么关系,但更多的是因为我构建我的方式是根本错误的事实class(这也是我第一次使用动态内存)。 非常感谢任何帮助。

class  Polinom
{
    int grad;
    int * coef;
public:
    Polinom(){ coef=new int; coef[0]=0; grad=0;}
    Polinom(int x, int *c);
    Polinom(int x) {coef=new int[x];}
    Polinom(const Polinom &);
    ~Polinom(){ delete[] coef; }
    Polinom operator=(Polinom);
};

Polinom::Polinom(int x, int * c)
{
    int i;
    coef=new int[x];
    for(i=0;i<x;i++)
    {
        coef[i]=c[i];
    }
}

Polinom::Polinom(const Polinom &Q)
{
    int i;
    grad=Q.grad;
    coef=new int[grad];
    for(i=0;i<grad;i++)
    {
        coef[i]=Q.coef[i];
    }
}

Polinom Polinom::operator=(Polinom Q)
{
    int i;
    delete[] coef;
    grad=Q.grad;
    coef=new int[grad];
    for(i=0;i<grad;i++)
        coef[i]=Q.coef[i];

    cout<<"finally";
    return (*this);
}

int main()
{
    int *v,*w;
    int i,n;

    cin>>n;
    v=new int[n];
    for(i=0;i<n;i++){ cin>>v[i]; }
    Polinom P(n,v);
    delete[] v;

    cin>>n;
    w=new int[n];
    for(i=0;i<n;i++){ cin>>w[i]; }
    Polinom Q(n,w);
    delete[] w;

    P=Q;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

在你的构造函数

Polinom::Polinom(int x, int * c)
{
  int i;
  coef=new int[x];
  for(i=0;i<x;i++)
  {
    coef[i]=c[i];
  }
}

您忘记将grad的值更新为x。导致你的=运算符中的Q.grad包含垃圾并失败。

这是更改后的代码

Polinom::Polinom(int x, int * c)
{
  int i;
  grad = x;
  coef=new int[x];
  for(i=0;i<x;i++)
  {
    coef[i]=c[i];
  }
}