1. ホーム
  2. c++

[解決済み] mallocです。*** オブジェクトに対するエラー: 解放されるポインタが割り当てられていない *** デバッグのために malloc_error_break にブレークポイントを設定します。

2022-02-09 14:49:17

質問

どなたか、このエラーの原因を教えていただけませんか?おそらく二重削除か何かだとは思うのですが。背景として、これはハフマン・ツリーの実装です。 ウィキペディア .

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);
  }
}

解決方法は?

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

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

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

を作成する必要があります。 leftright はヒープ上に確保されたオブジェクトを指すので、それが CharCountNode が期待されています。のようなものです。

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