std::bad_alloc C++调用operator=方法时抛出异常
std::bad_alloc exception thrown when operator= method is called C++
我正在用 C++ 编写我的第一个 class,这是一个多项式,我遇到了 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;
}
在你的构造函数中
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];
}
}
我正在用 C++ 编写我的第一个 class,这是一个多项式,我遇到了 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;
}
在你的构造函数中
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];
}
}