簡體   English   中英

列出迭代器不能解除引用?

[英]List iterator not dereferencable?

使用以下代碼時出現錯誤“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;

在周圍的代碼我們可以做pop_frontpush_frontsizeemptyend對檢查_list_of_messages但沒有erase電話。

我研究過STL文檔,看不出任何明顯的問題。 上面的代碼有什么問題,或者我在某處有內存泄漏?

謝謝! 不勝感激!

此斷言通常表示某種內存損壞錯誤,例如,當您從多個線程操作列表或者您已覆蓋存儲列表的“簿記”的內存時。

你有競爭條件嗎?

如果列表為空,那么在嘗試取消引用begin()時會出現問題,但是檢查為空。 您是否有另一個線程並行添加或刪除列表中的項目?

您的代碼片段在VS 2008上適用於我(假設我將typedef Counted_message_readerint )。

對於列表,當它引用的列表的元素被擦除時,迭代器將失效。 這可能發生了什么,但我沒有在您的示例代碼中看到它。 某處的野指針? (不確定,我可能會因為編碼過多而失明)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM