崩溃:这可能是由于堆的损坏

时间:2015-04-07 11:57:15

标签: c++ qgis qwt

我在我的插件中使用qwt5使用qgis 2.8.1((版本32位)使用qwt6)。当我运行我的C ++程序时,它崩溃了这个错误:

enter image description here

此函数发生问题(在调试中运行):

//delete all the items attached to QwtPlot
const QwtPlotItemList &list = m_pPlot->itemList ();
qDeleteAll(list.begin(), list.end());

我将此函数替换为:

QwtPlotItemIterator it = list.begin();
while ( it != list.end() )
{
  QwtPlotItem *item = *it;
  ++it; // increment before removing item from the list
  item->attach(NULL);
  delete item;
}

但在此说明中再次发生同样的崩溃:

delete item;

请你知道这个问题吗?

2 个答案:

答案 0 :(得分:3)

来自Qwt User's Guide

  

所有附加绘图项的QwtPlotItemList。

     

在迭代这些列表时要小心,因为删除/分离项目会使迭代器无效。相反,您可以在删除列表中放置指向要删除的对象的指针,然后再遍历该列表。

强调我的。

答案 1 :(得分:-2)

delete item移到循环之外。现在您多次删除item