2009-10-05 100 views
0

我最近陷入我的應用程序下列崩潰:訪問衝突閱讀位置:: set :: erase發生

m_players[0].erase(plr); -- CRASHES HERE 

m_players[1].erase(plr); 

m_players聲明爲:

set<PlayerPointer> m_players[2]; 

Visual Studio中顯示它是「0xC0000005:訪問衝突寫入位置0x0000000000000024」。

編譯:的Visual Studio 2008

Diassembly:000000014007AA3B MOV RCX,四字PTR [這](上墜毀)

所以我假設我們正在死去,因爲壞的 「本」,因爲它在該函數中第一次訪問它。但是因爲我看了當地人/汽車,這似乎不是一個糟糕的指針。

會很高興得到提示。

+2

我認爲你需要提供更多的信息。 – 2009-10-05 15:28:38

+0

請通過在調試器中顯示錯誤顯示來提供有關崩潰的更多信息。 – 2009-10-05 15:31:30

+0

聲明和數組初始化會有很大的幫助。 – 2009-10-05 15:35:22

回答

2

東西指向0.當您使用Visual Studio在調試模式下編譯您的應用程序。鍵入Ctrl + Alt + E並在拋出異常時激活它們。這將幫助您在運行異常處理程序之前檢測出現問題的地方。然後你可以發佈這個callstack,但我想你會很容易的看到&自己解決問題。我可以想象任何類型的plr的析構函數都有什麼壞處。

0

我認爲這與plr比m_players已被刪除或不可用更重要。你能告訴你如何得到plr嗎?它是一個局部變量還是被作爲參數傳遞?你可能想創建一個局部變量,然後在擦除函數中使用它並查看它是否崩潰。通過這種方式,您可以確定究竟是什麼導致了崩潰。

+0

嗯是的,謝謝 – Guest 2009-10-05 16:19:11

0

任何機會數組是全局的,有問題的代碼在數組被初始化之前執行(如果它的內部是全局對象的構造函數,就會發生)?

+0

hmm沒有 順便說一句,它崩潰(diassembly)000000014007AA3B mov rcx,qword ptr [this] – Guest 2009-10-05 19:10:50

1

使用Visual Studio時,始終確保運行時間是相同的。你有證實嗎? (例如多線程調試DLL(/ MDd))