malloc: * * * ошибка для объекта: освобождаемый указатель не был выделен * * * установите точку останова в malloc error break для отладки

может кто-нибудь помочь мне выяснить, где я получаю эту ошибку. Я знаю, что это, вероятно, двойное удаление или что-то вроде этого. Для фона это реализация дерева Хаффмана, как вы можете легко понять на Википедия.

реализация класса 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);
  }
}

1 ответов


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

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

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

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

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