我正在用C++构造一个Polynomial类。目前,我正在读入输入并创建一个具有度数和系数(双精度)数组的多项式对象。SegFault类中的析构函数[已更新]
Ex。
6x^3+7.4x^2-3.0x+9
Polynomial
----------
degree = 3
coefficients[0] = 6
coefficients[1] = 7.4
coefficients[2] = 3.0
coefficients[3] = 9
我在删除我的班级实例时出现错误。我不知道这个问题是完全...连同SEGFAULT
我的错误看起来像什么:
Segmentation fault: 11
0x00007ffff71fdfbd in malloc_printerr (ptr=<optimized out>,
str=0x7ffff7304ad8 "free(): invalid next size (fast)", action=<optimized out>) at malloc.c:4983
_int_free (have_lock=0, p=<optimized out>, av=<optimized out>) at malloc.c:3850
__GI___libc_free (mem=<optimized out>) at malloc.c:2960
请帮帮忙,谢谢!
我的构造是这样的:
/* Constructor for Polynomial */
Polynomial::Polynomial()
{
degree = 0;
coefficients = new double [1];
coefficients[0] = 0;
}
Polynomial::Polynomial (const Polynomial & P)
{
*this = P;
}
赋值运算符:
Polynomial & Polynomial::operator = (const Polynomial & P)
{
if (this != &P){
degree = P.degree;
coefficients = new double [P.degree + 1];
for (int i = 0; i <= P.degree; i++)
coefficients[i] = P.coefficients[i];
}
return *this;
}
我的析构函数看起来像:
/* Destructor for Polynomial */
Polynomial::~Polynomial()
{
delete [] coefficients; <--ERROR HERE
}
我在我的main()的实现看起来是这样的:
vector<Polynomial> Polys;
Polynomial *P1 = new Polynomial();
...
P1->degree = degreeInt;
P1->coefficients[idx] = coefficient;
Polys.push_back(*P1);
delete P1; <-- ERROR HERE
// Pushed Polynomial to Vector, create a new Polynomial object
P1 = new Polynomial();
你需要一个赋值操作符和拷贝构造函数,但就是为什么'coefficients'应该首先被动态分配无明显原因。 – EJP
'P1->系数[idx] =系数;'可能是越界访问。 –
您的第一步是了解内存泄漏和段错误之间的区别。 –