ottengo l'errore "iteratore di lista non dereferencable" quando si utilizza il seguente codice:Elenco iteratore non dereferenziabile?
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 linea che inizia con "Counted_message_reader ..." è quello che dà il problema)
Si noti che la l'errore non si verifica sempre ma apparentemente in momenti casuali (di solito quando ci sono molti dati bufferizzati).
_list_of_messages
è dichiarato come segue:
std::list<Counted_message_reader> _list_of_messages;
Nel codice circostante che potevamo fare pop_front
, push_front
e size
, empty
o end
controlli _list_of_messages
ma non erase
chiamate.
Ho studiato la documentazione STL e non vedo alcun problema di abbagliamento. C'è qualcosa di sbagliato nel codice sopra o ho una perdita di memoria da qualche parte?
Grazie! Apprezzato!
Invece di usare * (_ list.begin()) è possibile utilizzare _list.front(). – Patrick
stai accedendo alla lista da più thread? – Naveen
@ Patrick: farà la differenza? – Roderick