- [CCSprite setPosition:]:发送给deallocated实例的消息,现在怎么办?

时间:2012-11-11 01:42:35

标签: objective-c cocos2d-iphone box2d-iphone

我遇到了导致游戏崩溃的错误。首先它只是给了我一个“BAD_ACCESS”,但通过启用Zombie对象调试器说:

- [CCSprite setPosition:]:发送到解除分配的实例xxxx的消息

当对象A和B发生碰撞时发生崩溃,但只有在碰撞发生在对象B创建的同一时刻才会发生。

A和B都应该在碰撞中被销毁,除了上述情况外,这种方法都可以正常工作。我正在使用Box2D来实现它的价值。

有没有办法以更具体的方式跟踪错误?就像A或B那样给我带来麻烦。

1 个答案:

答案 0 :(得分:0)

如果您使用的是模拟器,请启用MallocStackLogging和NSDebugEnabled。然后,当您收到此消息时,请记下违规对象的进程ID和内存地址。然后在您的终端中,使用malloc_history <pid> <memory_address>查看此地址的alloc和deallocs的历史记录。它将为您提供每个alloc和dealloc的堆栈跟踪。最近的alloc可能是你分配了一些你可能没有保留的东西的地方,或者最近的dealloc就是你意外解除它的地方。

以下是malloc_history的手册页:

https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/malloc_history.1.html