Liste itérateur pas dereferencable?

J'obtiens l'erreur "liste itérateur pas dereferencable" lorsque vous utilisez le code suivant:

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 ligne commençant par "Counted_message_reader..." est celui qui donne le problème)

Remarque que l'erreur ne se produit pas toujours, mais apparemment de façon aléatoire (généralement quand il y a beaucoup de données mises en mémoire tampon).

_list_of_messages est déclarée comme suit:

std::list<Counted_message_reader> _list_of_messages;

Dans les environs de code que nous pourrions faire pop_front, push_front et size, empty ou end contrôles sur _list_of_messages mais pas erase appels.

J'ai étudié la STL de la documentation et ne peuvent pas voir les problèmes flagrants. Est-il quelque chose de mal avec le code ci-dessus ou dois-je avoir une fuite de mémoire quelque part?

Merci! Apprécié!

Au lieu d'utiliser *(_list.begin()) vous pouvez utiliser _list.avant().
êtes-vous accéder à la liste à partir de plusieurs threads?
Patrick, qui fera toute la différence?
Naveen - non, pas l'utilisation de plusieurs threads

OriginalL'auteur Roderick | 2010-04-19