List iterator not dereferencable?

Posted by Roderick on Stack Overflow See other posts from Stack Overflow or by Roderick
Published on 2010-04-19T13:05:26Z Indexed on 2010/04/19 13:23 UTC
Read the original article Hit count: 257

Filed under:
|
|
|

Hi All

I get the error "list iterator not dereferencable" when using the following code:

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();
    }
}

(The line beginning with "Counted_message_reader..." is the one giving the problem)

Note that the error doesn't always occur but seemingly at random times (usually when there's lots of buffered data).

_list_of_messages is declared as follows:

std::list<Counted_message_reader> _list_of_messages;

In the surrounding code we could do pop_front, push_front and size, empty or end checks on _list_of_messages but no erase calls.

I've studied the STL documentation and can't see any glaring problems. Is there something wrong with the above code or do I have a memory leak somewhere?

Thanks! Appreciated!

© Stack Overflow or respective owner

Related posts about c++

Related posts about iterators