【发布时间】:2011-07-15 09:46:24
【问题描述】:
while(!m_RemoveNodeList.empty())
{
list<CNode *>::const_iterator const it = m_RemoveNodeList.begin();
CNode * const pNode = *it;
ASSERT(pNode != NULL);
m_NodeList.remove( pNode );
delete pNode; // crashing here
m_RemoveNodeList.pop_front();
}
上述内容有时会在删除时因读取冲突异常而崩溃。会不会是我不小心双删了?
m_NodeList 和 m_RemoveNodeList 都是类型
std::list<CNode *>
我应该提到 CNode 是其他几个类的基类。但是这些类都没有在它们的析构函数中做任何事情
【问题讨论】:
-
m_RemoveNodeList是如何声明的?它是如何填充的? -
我已经相应地编辑了我的问题
-
值得将 size() 替换为 empty()。如果 m_RemoveNodeList 是一个链表,那么 size 是 O(N) 操作,而 empty 是 O(1)。
-
向我们展示
CNode的析构函数。 -
m_RemoveNodeList 中有重复的元素吗?其他任何地方都没有其他 CNode 删除?
标签: c++ pointers stl delete-operator