У меня есть структура:
typedef struct
{
char *ptr;
} A;
И карта
typedef std::map<std::wstring, A> myMap;
Я выделил память для поля ptr, используя malloc при заполнении карты.
Чтобы предотвратить утечки памяти при очистке карты, у меня есть следующий код (actualMap — это карта, которую я должен очистить):
for (myMap::iterator iter = actualMap.begin(); iter != actualMap.end(); ++iter)
{
Free((iter->second).ptr);
}
actualMap.clear();
Однако, когда я обычно запускаю приложение, я получаю исключение во время выполнения Free. Это исключение не генерируется, когда я запускаю приложение напрямую через VS2010.
Я что-то пропустил?
Благодарю.
Я рекомендую вам использовать C ++ std :: string вместо необработанного указателя
struct A
{
std::wstring data;
};
std::map<std::wstring, A> myMap;
actualMap.clear();
A имеет только один указатель, который указывает на строку, поэтому myMap может быть:
std::map<std::wstring, std::wstring> myMap;
Других решений пока нет …