C++ malloc: *** 对象错误:未分配被释放的指针 *** 在 malloc_error_break 中设置断点以进行调试

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22824802/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-28 00:14:33  来源:igfitidea点击:

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

c++cpointersmallochuffman-code

提问by waldyr.ar

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.

有人可以帮我弄清楚我在哪里收到此错误。我知道这可能是双重删除或类似的东西。对于背景,这是霍夫曼树的实现,您可以在wikipedia上轻松实现。

CharCountNode class implementation

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

采纳答案by The Dark

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. CharCountNodewill eventually try to deletethese objects, but they haven't been allocated by new.

这是获取指向局部变量的指针,下次循环时将重新初始化。CharCountNode最终会尝试delete这些对象,但它们还没有被 new 分配。

You need to make leftand rightpoint to objects allocated on the heap, as that is what CharCountNodeis expecting. Something like:

您需要创建leftright指向在堆上分配的对象,这正是我们CharCountNode所期望的。就像是:

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