Я получаю сообщение об ошибке «Итератор списка не разыменовывается» при использовании следующего кода:
bool done = false;
while (!_list_of_messages.empty() && !done) {
// request the next message to create a frame
// DEBUG ERROR WHEN NEXT LINE IS EXECUTED:
Counted_message_reader reader = *(_list_of_messages.begin());
if (reader.has_more_data()) {
_list_of_frames.push_back(new Dlp_data_frame(reader, _send_compressed_frames));
done = true;
} else {
_list_of_messages.pop_front();
}
}
(строка, начинающаяся с "Counted_message_reader ..." - это та, которая вызывает проблему)
Обратите внимание, что ошибка не всегда возникает, но, по-видимому, в случайные моменты времени (обычно при большом количестве буферизованных данных).
_list_of_messages
объявляется следующим образом:
std::list<Counted_message_reader> _list_of_messages;
В окружающем коде мы могли бы выполнять pop_front
, push_front
и size
, empty
или end
проверки на _list_of_messages
, но без вызовов erase
.
Я изучил документацию STL и не вижу явных проблем. Что-то не так с приведенным выше кодом или у меня где-то есть утечка памяти?
Спасибо! Оценил!