Я пытаюсь выполнить простой код на C ++, но получаю ошибку Debug Assertion Failed _BLOCK_TYPE_IS_VALID
при удалении указателя.Я не знаю, что я делаю неправильно.вот мой код.
hash_map<string,string> m_hashDetails;
m_hashDetails.insert(hash_map<string,string>::value_type("test",*(new string("test123"))));
hash_map<string,string>::iterator myIterator;
myIterator = m_hashDetails.find("test");
if(myIterator == m_hashDetails.end())
{
printf("not found");
}
else
{
printf(myIterator->second.c_str());
//this is where I get Debug Assertion Failed _BLOCK_TYPE_IS_VALID
delete &(myIterator->second);
}
Когда я удаляю second
поле hash_map
, я получаю Debug Assertion Failed _BLOCK_TYPE_IS_VALID
ошибку.Что я делаю не так?Я выделил поле second
с помощью оператора new
?Одна вещь, которую я заметил, что если я изменю определение hash_map на hash_map<string,string *> m_hashDetails;
и вставлю такие значения, как
m_hashDetails.insert(hash_map<string,string>::value_type("test",new string("test123")));
, тогда delete
не выдаст ошибку .. и работает нормально?Какова действительная причина этой ошибки?