正在释放的指针未分配 - 如何调试?

时间:2013-01-08 16:18:26

标签: c++ debugging gdb malloc

我收到运行时错误

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

使用以下堆栈跟踪:

enter image description here

这告诉我在析构函数~Clustering~NodeMap中出现问题(第一个是空存根,第二个调用delete[]),但不是“指针”被释放“是。我怎么能找到这个?

此外,malloc_error_break在哪里?

2 个答案:

答案 0 :(得分:3)

你有复制构造函数来复制已分配的内存吗?如果没有复制构造函数或者它没有复制已分配的内存,则两个对象的析构函数会尝试释放相同的内存位置。

答案 1 :(得分:2)

  

这告诉我在析构函数~Clustering~NodeMap中出现问题(第一个是空存根,第二个调用delete[]),但不是“指针”被释放“是。

仅仅因为~Clustering是“空的存根”并不意味着它不会做任何事情。在执行析构函数体之后,析构函数为每个直接非变量非静态数据成员调用析构函数。显然,您的班级Clustering包含NodeMap<long,long>类型的数据成员。

  

我怎样才能找到这个?

您的班级NodeMap<long,long>包含多少个已分配的数组?如果它只有一个,就是那个。如果有多个,请在~NodeMap中设置断点,以便逐步执行。