私はヒープのキューを実装する以下のコードを、持っています。ヒープでダブル無料または破損
Queue<Heap<struct infoNode>, SIZE> queue;
for(int c = 0 ; c < SIZE; c++)
{
Heap<struct infoNode> h;
queue.enqueue(h, 0);
}
、私はこのようなコピーコンストラクタをオーバーロードしています
template <typename T>
Heap<T>::Heap(const Heap<T> &h)
{
cout << "this " << this << " h " << &h << endl;
capVect = h.capVect;
if(values) delete [] values;
values = new T[capVect];
dimVect = h.dimVect;
for(int i = 0; i < dimVect; i++)
values[i] = h.values[i];
}
私はqueue.enqueue(h, 0)
を作るとき、私は二重の無料または破損を取得。なぜ私はこれとコピーするヒープのために同じアドレスを参照しているのかわかりません。
this 0x7ffcbc2771a0 h 0x7ffcbc277190
this 0x7ffcbc2771a0 h 0x7ffcbc277190
*** Error in `./comp': double free or corruption (top): 0x00000000017f0690 ***
Aborted (core dumped)
あなたは 'Heap'の多くを示していることはできますか? –
http://stackoverflow.com/help/mcve – melpomene
'if(values)delete [] values;'はコンストラクタで行うべきではありません。 (値)は、コンストラクタで[]の値を削除した場合 – NathanOliver