Подтвердить что ты не робот

Malloc: *** ошибка для объекта: освобожден указатель; *** установить точку останова в malloc_error_break для отладки

Может кто-нибудь помочь мне выяснить, где я получаю эту ошибку. Я знаю, что это, вероятно, двойное удаление или что-то в этом роде. Для фона это реализация дерева huffman, как вы легко можете реализовать на 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);
  }
}
4b9b3361

Ответ 1

Проблема с этим кодом:

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

Это получает указатели на локальные переменные, которые будут повторно инициализированы в следующий раз вокруг цикла. CharCountNode в конечном итоге попытается выполнить delete эти объекты, но они не были назначены новыми.

Вам нужно сделать left и right указать объекты, выделенные в куче, поскольку это то, что ожидает CharCountNode. Что-то вроде:

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