我正在使用VS2008。
我上次写内存泄漏代码已经很久了:),直到我遇到这个。 它来自:\ atlmfc \ src \ mfc \ plex.cpp(29):
调用CMap :: SetAt时调用MFC“CPlex :: Create”,同时调用“pAssoc = NewAssoc()”来分配内存。
据我所知,通过调用“RemoveAll()”来释放容器是不够的,需要迭代每个条目并删除每个条目。
但在这种情况下,我想要的只是使用CMap存储该对,我不希望CMap删除它存储的值指针。 (另一个容器处理它。)
注意:此内存泄漏也发生在“CMapStringToPtr”中(由其他开发人员报告并用Google搜索,未经测试确认)
01 typedef CMap <int, int, CNode*, CNode*&> CNodeIndexMap;
02 CNodeIndexMap m_mapIndexToNode;
03 CNode* pNode = ... //This pNode is from another container, which is responsible for the nodes' clean
04 m_mapIndexToNode.SetAt(nIndex, pNode);
....
05 m_mapIndexToNode.RemoveAll();
//Clean node list
06 for(int i = 0; i < lstNode.GetCount(); i++)
07 {
08 CNode* pNode = lstNode.GetAt(i);
09 delete pNode;
10 }
11 lstNode.RemoveAll();
我猜这是一个微软的bug。如果确实如此,我可以使用什么数据结构来创建“索引表”以及如何正确使用它?
对此内存泄漏有任何想法或评论吗?