我有間歇長的一段時期運行時崩潰,並「訪問衝突」的程序。對它進行調試後,我發現了一個非常奇怪的現象。訪問衝突書面新分配的內存
上的代碼的程序崩潰指派(拷貝)一個std::vector
到另一個,這樣的:
struct Data
{
int int1;
int int2;
}
//vec1 is empty
//vec2 contains a couple of thousands Data structs
std::vector<struct Data> vec1 = vec2;//**crash happens here**
什麼情況是簡單 - STL分配存儲器塊vec1
,和從vec2
數據被複制那裏。分配情況良好。當STL試圖用vec2
的數據填充新分配的內存vec1
時,複製過程發生崩潰。 更奇怪的是,該複製過程的某些部分已正確執行,並且崩潰發生在該過程中的某個位置。
我的問題是 - 新分配的內存塊如何可以「部分」不可寫?謝謝。
編輯:傢伙,我不說這個代碼有問題 - 它當然不會。我在問爲什麼這種類型的代碼會崩潰?即我的程序的其他部分如何修改由STL新分配的內存塊?以及如何調試這種內存損壞?
是的,這纔是真正的代碼
加法:我已經啓用頁堆,以查看是否執行該代碼之前發生問題。它沒有抓到任何東西。
這個問題是在別的地方......也許有一個懸掛指針或類似的地方。 – thang 2013-02-17 13:00:42
這實際上是'Data'結構的外觀嗎?如果是這樣,那麼問題在別的地方。 – jalf 2013-02-17 13:01:14
當免費商店遭到破壞時,幾乎可以發生任何事情。這種問題很難追查到,因爲腐敗發生在某個地方**之前,它顯示出症狀。 – 2013-02-17 13:01:35