MFC CMap SetAt中的内存泄漏

时间:2012-03-01 00:24:51

标签: memory-leaks mfc

我正在使用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。如果确实如此,我可以使用什么数据结构来创建“索引表”以及如何正确使用它?

对此内存泄漏有任何想法或评论吗?

0 个答案:

没有答案