Quelqu'un peut-il m'aider à comprendre où je reçois cette erreur. Je sais que c'est probablement une double suppression ou quelque chose comme ça. Pour le fond, c'est une implémentation de l'arbre de Huffman comme vous pouvez facilement le constater sur wikipedia .
implémentation de la classe 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);
}
}
Le problème vient de ce code:
parent.left = &a;
parent.right = &b;
Cela obtient des pointeurs vers des variables locales, qui seront réinitialisées la prochaine fois dans la boucle. CharCountNode
tentera éventuellement de delete
ces objets, mais ils n'ont pas été alloués par new.
Vous devez faire pointer left
et right
vers les objets alloués sur le tas, car c'est ce que CharCountNode
attend. Quelque chose comme:
parent.left = new CharCountNode(a);
parent.right = new CharCountNode(b);