Хорошо, у меня есть список ссылок STL, с которым я перебираю. Эта функция имеет три эквивалентные части. Функция принимает параметр wstring в качестве параметра и запускает соответствующий оператор if. Я сократил код до одного оператора if, чтобы попробовать и заставить его работать.Устранение неполадок элементов через список во время итерации
Итак, я проверяю, что было передано в качестве аргумента. Затем я проверяю, является ли ClassItem определенным типом животного. Если это так, я проверяю, голоден ли он, и удалите его из списка. Я просто пытаюсь избежать seg-сбоев прямо сейчас и не могу это сделать.
list<ClassItem *>::iterator i = Items.begin();
while(i != Items.end())
{
if(!AnimalType.compare(L"tiger"))
{
if((*i)->IsAnimalType(L"tiger"))
{
if((*i)->IsHungry())
{
i = Items.erase(i);
}
}
else
{
++i;
}
}
// I have tried removing this
else
{
i++;
}
}
У меня создалось впечатление, что текущий итератор недействителен, когда я вызываю стирание. Итак, если я стираю элемент, я возвращаю следующий допустимый итератор. Где я иду не так?
EDIT: Благодарим вас за помощь. Проблема была исправлена. Я воспользовался решением для phresnel, и он отлично работал.
Что произойдет, если у вас есть «тигр», который не голоден? Бесконечный цикл, переполнение стека, хаос ... – Gorpik
Что такое AnimalType.compare (L "tiger")? – erenon
этот код сам по себе не должен segfault. пожалуйста, покажите полный пример. –