web-dev-qa-db-ja.com

malloc:***オブジェクトのエラー:解放されるポインターが割り当てられていません*** malloc_error_breakにブレークポイントを設定してデバッグします

誰かが私がこのエラーを受け取っている場所を理解するのを手伝ってもらえますか?おそらく二重削除か、このようなものだと思います。背景については、これは wikipedia で簡単に実現できるハフマンのツリーの実装です。

CharCountNodeクラスの実装

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);
  }
}
14
waldyr.ar

問題はこのコードにあります:

parent.left = &a;
parent.right = &b;

これはローカル変数へのポインタを取得しています。ローカル変数は次回ループの周りで再初期化されます。 CharCountNodeは最終的にこれらのオブジェクトをdeleteしようとしますが、newによって割り当てられていません。

leftrightがヒープに割り当てられたオブジェクトを指すようにする必要があります。これがCharCountNodeが期待していることです。何かのようなもの:

parent.left = new CharCountNode(a);
parent.right = new CharCountNode(b);
12
The Dark