这个问题貌似以前也遇到过,今天再次遇到,debug进去也发现内存都释放了,但结果还是有内存泄露,很是纳闷!最好还是发现了问题所在!
注意下面这个循环加粗那个话,当把 m_pFrameObject[i] 的数据压入到 m_pVideoObject 中后,把 m_pFrameObject[i] 的指针给删了,则m_pFrameObject[i+1] 的指针移动到了 m_pFrameObject[i] 的位置,然后在 i++,此时则漏过了遍历 m_pFrameObject[i+1] 的数据,最后把 m_pFrameObject 清空时则造成了内存泄露!
// add new dynamic object into video object list
for (int i=0; i< int(m_pFrameObject.size()); i++ )
{
CDynamicObject* pDynamicObject = m_pFrameObject[i];
m_pVideoObject.push_back(pDynamicObject);
m_pFrameObject.erase(m_pFrameObject.begin() + i);
}
m_pFrameObject.clear();
本文通过一个具体的编程案例,分析了一种常见的内存泄露原因。详细解释了在遍历并删除容器元素过程中,由于指针移动而忽略某些元素导致的内存泄露问题。
2268

被折叠的 条评论
为什么被折叠?



