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