Я использую hash_map в приложении как
typedef hash_map<DWORD,CComPtr<IInterfaceXX>> MapDword2Interface;
В основном приложении я использую статический экземпляр этой карты
static MapDword2Interface m_mapDword2Interface;
Я получил один аварийный дамп от одного из клиентовмашины, которые указывают на сбой при очистке этой карты
Я открыл этот аварийный дамп и вот сборка во время отладки
> call std::list<std::pair<unsigned long const ,ATL::CComPtr<IInterfaceXX> >,std::allocator<std::pair<unsigned long const ,ATL::CComPtr<IInterfaceXX> > > >::clear
> mov eax,dword ptr [CMainApp::m_mapDword2Interface+8 (49XXXXX)]
Вот код, на который указывает аварийный дамп.Ниже приведен код из stl: файл списка
void clear()
{ // erase all
#if _HAS_ITERATOR_DEBUGGING
this->_Orphan_ptr(*this, 0);
#endif /* _HAS_ITERATOR_DEBUGGING */
_Nodeptr _Pnext;
_Nodeptr _Pnode = _Nextnode(_Myhead);
_Nextnode(_Myhead) = _Myhead;
_Prevnode(_Myhead) = _Myhead;
_Mysize = 0;
for (; _Pnode != _Myhead; _Pnode = _Pnext)
{ // delete an element
_Pnext = _Nextnode(_Pnode);
this->_Alnod.destroy(_Pnode);
this->_Alnod.deallocate(_Pnode, 1);
}
}
Сбой указывает на this->_Alnod.destroy(_Pnode)
;утверждение в приведенном выше коде.
Я не могу угадать, в чем может быть причина.
Любые идеи ???
Как я могу убедиться, даже есть личто-то не так с картой, она не должна падать?