01/10/2018, 15:06

Thắc mắc về delete mảng động trong c++

Mọi người cho em hỏi em có làm một bài tập về OOP
Nhưng tới lúc chạy thì lại bị lỗi ở đoạn giải phóng của mảng động.
Mọi người cho em hỏi nguyên nhân gây ra lỗi và cách giải quyết với ạ.
Em cảm ơn!

Đây là code của em:
[CODE]#include
#include
using namespace std;

class donthuc
{
private:
double heso;
int somu;
public:
donthuc(double x = 0, int y = 0) : heso(x), somu(y) {}
~donthuc() {}
void nhap();
void xuat();
void setHS(double x = 0) { heso = x; }
void setSM(int y = 0) { somu = y; }
double getHS() { return heso; }
int getSM() { return somu; }
donthuc cong(donthuc a);
donthuc tru(donthuc a);
};

class dathuc
{
private:
donthuc* a;
int maxSOMU;
public:
dathuc() {};
dathuc(int n) : maxSOMU(n) {}
~dathuc();
void nhap();
void xuat();
double getHESO(int i) { return a[i].getHS(); }
void setHESO(int i, int n = 0) { a[i].setHS(n); a[i].setSM(i); }
dathuc cong(dathuc);
dathuc cong(donthuc);
dathuc tru(dathuc);
dathuc tru(donthuc);
};

int main()
{
donthuc a;
dathuc b;
dathuc c;
a.nhap();
b.nhap();
c = b.cong(a);
c.xuat();
cout<<endl;
c = b.tru(a);
c.xuat();
c.xuat();
system(“pause”);
return 0;
}

//donthuc

void donthuc::nhap()
{
cout<<"Nhap so mu don thuc: ";
cin>>this->somu;
cout<<"Nhap he so don thuc: “;
cin>>this->heso;
}
void donthuc::xuat()
{
if(heso == 0)
cout<<0;
else
{
if(somu == 0)
cout<<heso<<” “;
else if(somu == 1)
cout<<heso<<“x”<<” “;
else
cout<<heso<<“x^”<<somu<<” ";

}

}
donthuc donthuc::cong(donthuc z)
{
donthuc c;
if(this->somu == z.somu)
c.heso = this->heso + z.heso;
return c;
}
donthuc donthuc::tru(donthuc z)
{
donthuc c;
if(this->somu == z.somu)
c.heso = this->heso - z.heso;
return c;
}

//dathuc
dathuc::~dathuc()
{
if(this->a != NULL)
delete[] this->a;
}
void dathuc::nhap()
{
cout<<"Nhap vao so mu lon nhat: ";
cin>>this->maxSOMU;
a = new donthuc[maxSOMU];
for(int i = 0; i <= this->maxSOMU; i++)
{
double n;
cout<<“Nhap he so cua so mu “<<i<<endl;
cin>>n;
this->a[i].setHS(n);
this->a[i].setSM(i);
}
}
void dathuc::xuat()
{
cout<<a[0].getHS();
for(int i = 1; i <= this->maxSOMU; i++)
{
if(a[i].getHS() > 0)
{
cout<<”+”;
a[i].xuat();
}
else
{
a[i].xuat();
}
}
}
dathuc dathuc::cong(dathuc z)
{
int max = (this->maxSOMU > z.maxSOMU) ? this->maxSOMU : z.maxSOMU;
int min = (this->maxSOMU < z.maxSOMU) ? this->maxSOMU : z.maxSOMU;
dathuc g(max);
g.a = new donthuc[max+ 1];
for(int i = 0; i <= max; i++)
{
g.a[i] = this->a[i].cong(z.a[i]);
g.a[i].setSM(i);
}
return g;
}
dathuc dathuc::cong(donthuc z)
{
dathuc g(this->maxSOMU);
g.a = new donthuc[g.maxSOMU + 1];
for(int i =0; i<= this->maxSOMU; i++)
{
g.a[i].setHS(this->a[i].getHS());
g.a[i].setSM(this->a[i].getSM());
}
for(int i = 0; i <= this->maxSOMU; i++)
{
if( i == z.getSM())
{
g.a[i] = this->a[i].cong(z);
g.a[i].setSM(i);
break;
}
}
return g;
}
dathuc dathuc::tru(dathuc z)
{
int max = (this->maxSOMU > z.maxSOMU) ? this->maxSOMU : z.maxSOMU;
int min = (this->maxSOMU < z.maxSOMU) ? this->maxSOMU : z.maxSOMU;
dathuc g(max);
g.a = new donthuc[max+ 1];
for(int i = 0; i <= max; i++)
{
g.a[i] = this->a[i].tru(z.a[i]);
g.a[i].setSM(i);
}
return g;
}
dathuc dathuc::tru( donthuc z)
{
dathuc g(this->maxSOMU);
g.a = new donthuc[g.maxSOMU + 1];
for(int i =0; i<= this->maxSOMU; i++)
{
g.a[i].setHS(this->a[i].getHS());
g.a[i].setSM(this->a[i].getSM());
}
for(int i = 0; i <= this->maxSOMU; i++)
{
if( i == z.getSM())
{
g.a[i] = this->a[i].tru(z);
g.a[i].setSM(i);
break;
}
}
return g;
}
[/CODE]

Và đây là đoạn báo lỗi:

dathuc::~dathuc()
{
	if(this->a != NULL)
		delete[] this->a;
}
Bài liên quan
0