Проблема с std::map - Access Violation
От: Vlad_SP  
Дата: 25.01.05 08:52
Оценка:
Есть код (сокращенно):

class CTable : public map<string, CItem, less<string> > 
{ 
public: 
   BOOL  Add( const CItem& newElement ); 
}; 

//************************* 
BOOL CTable::Add( const CItem& newElement ) 
{ 
   // !!!!!! вот 
   pair<iterator, bool> cp = insert( value_type(newElement.m_code, newElement) ); 
   return cp.second ; 
}

Среда разработки MSVC++ 7.1, ОС WinXP и Win2000. MFC не используется, именования классов с Cxxx — всего лишь дань сложившейся традиции в проекте.
Проблема:
при выполнении метода CTable::Add() на 4-й итерации возникает исключение защиты памяти, либо "зависание" приложения. В том случае, если исключение защиты памяти не возникает и не зависает (всего итераций — около 6000), то возникает AV при попытке удаления динамического объекта CTable:
 
   delete m_pMap;  // <===== здесь AV 
   m_pMap = NULL;

Объект-владелец гарантированно "живой", указываемый объект гарантированно удаляется только в одном (именно этом, проверено поиском по всем файлам проекта) месте.

Проект был портирован в MSVC7 из "шестерки", в ней более 3-х лет работало все у заказчиков "на ура!". После перехода на "семерку" — граблей я не ожидал, но — отладка выявила такую неприятность. Где я не прав? Кто-нибудь сможет выпрямить мне руки?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.