我在多線程環境中遇到問題。我有一個正確的「Multiple Read-Single Write」鎖定環境,修改了std::list
。 我現在的問題是,我收到一封「列表迭代器不dereferencable」 -exception和Visual只顯示這一點,如果我檢查它:std :: list容器填充錯誤的常見原因
在列表中的第一項的值爲「0xcdcdcdcd」 。
可能是什麼原因?我很樂意爲您提供更多的細節,但我不知道從哪裏開始,它已經耗費了幾天的時間來調試它,但是如果代碼以斷點運行,則不會發生這種情況。
UPDATE
我有現在降低至一個更簡單的問題(可惜仍然無法將其降低到一個小的非工作的例子)。它現在只能在單線程環境下運行 - 所以不能再應用多線程問題。
該列表中充滿了5000個元素,我打電話給data.resize(100)
,它崩潰了 - 刪除了3500個元素。 每個元素總是處理完全一樣,它們全部包含在shared_ptr<>
我不保存任何迭代器,可能會失效,它只是通過刪除列表中的隨機元素而崩潰。 我不知道從哪裏開始。
「但如果代碼與斷點一起運行,則不會發生這種情況。」這表明一個競爭條件,使您的迭代器失效 – SingerOfTheFall
底層容器是一個std :: list,它並不關心插入/刪除時的迭代器失效(當然除去已刪除的元素) - 但爲什麼調試器仍然顯示已刪除的元素? – EGOrecords
http://en.wikipedia.org/wiki/Magic_number_(programming)建議0xCCCCCCCC:由微軟的C++調試運行時庫用來標記未初始化的堆棧內存 –