У меня ошибка сегментации в функции стирания std :: vector, которая сводит меня с ума.У меня следующий код:
std::map<uint32_t, std::vector<boost::uuids::uuid> >::iterator it
= theAs.find(lSomeUint32);
if (it != theAs.end()) {
std::vector<boost::uuids::uuid>& lIds = it->second; // vector contains one entry
std::vector<boost::uuids::uuid>::iterator it2 = lIds.begin();
while (it2 != lIds.end()) {
if (*it2 == lSomeUuid) {
lIds.erase(it2);
break;
}
++it2;
}
}
В lIds.erase (it2) я получаю ошибку сегментации.Точнее, я получаю ошибку сегментации в _Orphan_range (ее можно найти в каталоге c: \ Program Files \ Microsoft Visual Studio 10.0 \ VC \ include \ vector), которая вызывается из стирания.Но я понятия не имею, почему.Вектор и итератор выглядят нормально.Но в _Orphan_range что-то идет не так.Цикл while выполняется там три раза, хотя мой вектор содержит только один элемент.При третьем запуске переменная _Pnext ломается.
У кого-то есть идея?Это было бы здорово!
Дэвид
К сожалению (или, к счастью, к счастью), приведенный выше пример выполнял отдельные работы.Но в моем большом программном проекте это не работает.
Кто-нибудь знает, для чего выполняется сбойная функция _Orphan_range?