当我使用以下代码时,出现“list iterator not dereferencable”错误:
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;
在周围的代码中,我们可以对
_list_of_messages
进行 pop_front
、push_front
和 size
、empty
或 end
检查,但没有 erase
调用。我已经研究了STL文档,没有发现任何明显的问题。以上代码有问题吗?还是我在某个地方有内存泄漏?
谢谢!感激不尽!