私はC++で多項式クラスを構築しています。現在、私は入力を読み込み、次数と係数(倍精度)配列を持つ多項式オブジェクトを作成しています。SegFault in class destructor [UPDATED]
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
}
)(私のメインの内側に私の実装は次のようになります。
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();
代入演算子とコピーコンストラクタが必要ですが、なぜ係数が最初に動的に割り当てられるべきかはっきりした理由はありません。 – EJP
'P1-> coefficients [idx] =係数;'はおそらく境界外アクセスです。 –
あなたの最初のステップは、メモリリークとセグメンテーションの違いを知ることです。 –