У меня есть приложение C ++, в котором произошла ошибка одноразового подтверждения, которую я не могу воспроизвести. Вот код, который не удался один раз:
unsigned int test(std::vector<CAction> actionQueue) {
unsigned int theLastCount = actionQueue.size() - 1;
std::vector<CAction>::const_reverse_iterator rItr = actionQueue.rbegin();
std::vector<CAction>::const_reverse_iterator rEndItr = actionQueue.rend();
for (; rItr != rEndItr; ++rItr, --theLastCount) {
const CAction &fileAction = *rItr;
if (fileAction.test()) {
continue;
}
return theLastCount;
}
assert(theLastCount == 0); // How could this fail?
return theLastCount;
}
Каким-то образом theLastCount не был равен нулю после завершения цикла.
Из моего прочтения логики это должно быть невозможно, если:
- Какая-то другая сторона потока воздействовала на actionQueue (что я не считаю возможным).
- Произошло временное повреждение памяти.
Я что-то упустил здесь, есть ли в моем коде ошибка? Обратите внимание, что в случае, когда я видел это, theLastCount должен был быть инициализирован как один, так как вектор имел два элемента.