Я использовал VS2008.
Уже давно я не писал код утечки памяти :), пока не встретил этот код.сообщается из: \ atlmfc \ src \ mfc \ plex.cpp (29):
MFC "CPlex :: Create" вызывается при вызове CMap :: SetAt, а "pAssoc = NewAssoc ()"вызывается для выделения памяти.
Я понимаю, что освободить контейнер, просто вызвав" RemoveAll () ", недостаточно, нужно выполнить итерацию каждой записи и удалить каждую из них.
Нов этом случае все, что я хотел - это использовать CMap для хранения пары, я не хочу, чтобы CMap удалял сохраненный указатель значения.(Другой контейнер обрабатывает это.)
Примечание: эта утечка памяти также произошла в "CMapStringToPtr" (сообщил другим разработчиком и погуглил их, не проверял, чтобы подтвердить)
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();
Я предполагаюэто ошибка Microsoft.Если это действительно так, то какую структуру данных я могу использовать для создания «индексной таблицы» и как правильно ее использовать?
Есть идеи или комментарии по поводу этой утечки памяти?