目前,我正在制作自己的C ++游戏,为此,我正在使用Box2D物理。
如果我尝试退出游戏,则会向我输出错误:
NinjaPlatformer.exe中的0x003A2AE4发生异常错误:0xC0000005:
在位置0xFEEEFEF2读取时发生访问冲突
在b2Contact* c = ce->contact;
行中
这是包装代码:
for (b2ContactEdge* ce = body->GetContactList(); ce != nullptr; ce = ce->next) {
b2Contact* c = ce->contact;
if (c->IsTouching()) {
// something
}
}
我的猜测是,如果我尝试关闭该应用程序,则首先删除主体联系人,然后该程序再循环一个for循环,然后
ce = body->GetContactList()
行将返回错误,因为未定义主体,这是正确的吗?如果它为真,那么我如何在for循环中检查ce是否为空,因为当游戏崩溃时ce的值为:0xfeeefeee {other = ???联系人= ??? prev = ??? ...}。
结果,ce具有这个奇怪的值c后来又有一个奇怪的值:0x07932d78 {m_type = b2_dynamicBody | -17891604(-17891602)m_flags = 65262 m_islandIndex = -17891602 ...}
最佳答案
您必须注意边缘条件:列表中最后一个有效的b2ContactEdge * ce没有初始化的“ next”成员。
“下一个”在列表中的最后一个ce处具有无效值0xFEEEFEF2。
我建议您将此构造函数添加到b2ContactEdge类中:
b2ContactEdge() { next = NULL; }
关于c++ - C++和Box2D物理:退出时崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35959938/