me sale el error "iterador de la lista no dereferencable" cuando se utiliza el siguiente código:¿El iterador de lista no es desreferenciable?
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();
}
}
(La línea que comienza con "Counted_message_reader ..." es el que da el problema)
Tenga en cuenta que la el error no siempre ocurre, pero aparentemente en momentos aleatorios (generalmente cuando hay muchos datos almacenados en el búfer).
_list_of_messages
se declara como sigue:
std::list<Counted_message_reader> _list_of_messages;
En el código que rodea podíamos hacer pop_front
, push_front
y size
, empty
o end
controles de _list_of_messages
pero no erase
llamadas.
He estudiado la documentación de STL y no puedo ver ningún problema evidente. ¿Hay algún problema con el código anterior o tengo una pérdida de memoria en alguna parte?
Gracias! ¡Apreciado!
En lugar de usar * (_ list.begin()) puede usar _list.front(). – Patrick
¿está accediendo a la lista desde múltiples hilos? – Naveen
@ Patrick - ¿Hará alguna diferencia? – Roderick