Can someone help me figure out where I'm getting this error. I know it's probably a double deletion or something like this. For the background this is an implementation of the huffman's tree as you can easily realize on wikipedia.
CharCountNode class implementation
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);
}
}
The problem is with this code:
parent.left = &a;
parent.right = &b;
This is getting pointers to local variables, which will be reinitialized next time around the loop. CharCountNode
will eventually try to delete
these objects, but they haven't been allocated by new.
You need to make left
and right
point to objects allocated on the heap, as that is what CharCountNode
is expecting. Something like:
parent.left = new CharCountNode(a);
parent.right = new CharCountNode(b);