gpt4 book ai didi

C++ 和 Box2D 物理 : Crash while quitting

转载 作者:行者123 更新时间:2023-11-28 05:47:23 25 4
gpt4 key购买 nike

目前我正在制作自己的 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
}
}

我的猜测是,如果我尝试关闭应用程序, body 接触会先被删除,然后程序再循环一次到 for 循环,然后是 ce = body->GetContactList() 将返回错误,因为未定义 body,对吗?

如果它是真的,如果 ce 不为空,我该如何检查 for 循环,因为当游戏崩溃时 ce 的值为:0xfeeefeee {其他=???联系方式=???上一页=??? ...

因此,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++ 和 Box2D 物理 : Crash while quitting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35959938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com