誰かが私がこのエラーを受け取っている場所を理解するのを手伝ってもらえますか?おそらく二重削除か、このようなものだと思います。背景については、これは wikipedia で簡単に実現できるハフマンのツリーの実装です。
int main()
{
ifstream input;
input.open("input.txt");
MinPriorityQueue<CharCountNode> heap;
map<char, int> m;
while(input.good())
m[input.get()] += 1;
for( map<char, int>::const_iterator it = m.begin(); it != m.end(); ++it )
heap.enqueue(CharCountNode(it->first, it->second));
while(heap.getSize() > 1)
{
CharCountNode a, b, parent;
a = heap.dequeue();
b = heap.dequeue();
parent = CharCountNode('*', a.getCount() + b.getCount());
parent.left = &a;
parent.right = &b;
heap.enqueue(parent);
}
}
問題はこのコードにあります:
parent.left = &a;
parent.right = &b;
これはローカル変数へのポインタを取得しています。ローカル変数は次回ループの周りで再初期化されます。 CharCountNode
は最終的にこれらのオブジェクトをdelete
しようとしますが、newによって割り当てられていません。
left
とright
がヒープに割り当てられたオブジェクトを指すようにする必要があります。これがCharCountNode
が期待していることです。何かのようなもの:
parent.left = new CharCountNode(a);
parent.right = new CharCountNode(b);