我最近在我的应用程序中遇到了以下崩溃:

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。

组装件:000000014007AA3B mov rcx,qword ptr [this](崩溃)

因此,我假设我们将因“ this”的错误而死,因为它在该函数中首次对此具有访问权限。但是,因为我看过本地人/汽车,所以这似乎并不是一个坏指针。

会很高兴得到提示。

最佳答案

某些东西指向0。在使用Visual Studio时,以调试模式编译应用程序。键入Ctrl + Alt + E并在引发异常时激活它们。这将帮助您在运行异常处理程序之前检测出哪里出了问题。然后,您可以发布调用堆栈,但是我认为您随后就可以轻松地自己解决问题。我可以想象在任何类型的plr的析构函数中都有不好的事情。

09-06 09:14