malloc: *** error for object: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug
Asked Answered
K

1

14

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);
  }
}
Karmen answered 2/4, 2014 at 23:6 Comment(4)
set a breakpoint in malloc_error_break to debug.Dupery
Apply valgrind and fix the very first thing it complains about. Repeat until program works correctly.Beaut
As of the time of this post: valgrind doesn't work with Mac OS X 10.10.Merill
@Merill Use a VM.Fir
C
12

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);
Cerracchio answered 2/4, 2014 at 23:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.