【发布时间】:2015-03-12 11:57:31
【问题描述】:
我正在开发一款游戏,它使用游戏中实体的链表。我发现我认为是某种错误。请注意,我正在使用 C 进行编码。但是在遇到 C 指针问题之后,我正在考虑尝试 C++ 技术。
在我的调试测试中,两个射弹相撞,将它们炸毁。基本上情况是这样的:
从实体的移动功能开始: 1) 射弹实体移动 2) 遍历所有在这个新位置检查碰撞的实体 3) 如果发生碰撞,在这种情况下是在弹丸之间,将两者都移除
我将实体的双指针传递给发生冲突的函数。该实体可能会被删除,但我仍然需要使用它来将实体推进到列表中的下一个实体(在 while 循环中)。如果这没有意义,它被视为这样:
ENTITY *node;
while (node)
{
...
entity_do_collision (&node); // <-- node may be removed in this function
//Debug
if (node == global_node)
{
}
else
node = global_node;
node = node->next; // <-- pass a double pointer above so this works here
}
所以,我已经多次运行代码,并没有看到任何非法操作。让我感动的部分是有时双指针会起作用,有时不会。我使用全局实体指针(始终有效)进行测试,以在我的实体移动函数中进行比较,以测试被删除的节点是否与实体删除函数中设置的内容相匹配。
这个描述有点抽象,如果我需要更多解释,请告诉我。
【问题讨论】:
标签: c list pointers linked-list