我最近在我的应用程序中遇到了以下崩溃:
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的析构函数中都有不好的事情。