我得到的錯誤「列表迭代器不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文檔,看不到任何明顯的問題。上面的代碼有什麼問題嗎?或者我有一處內存泄漏?
謝謝!不勝感激!
而不是使用*(_ list.begin()),你可以使用_list.front()。 – Patrick 2010-04-19 13:12:18
你是從多個線程訪問列表? – Naveen 2010-04-19 13:15:56
@帕特里克 - 這有什麼區別? – Roderick 2010-04-19 13:20:22