我遇到ccTouchesBegan
的问题
- (void)ccTouchesBegan:(UITouch *)touches withEvent:(UIEvent *)event {
if (_mouseJoint != NULL) return;
_paddleBody=body2;
UITouch *myTouch = [touches anyObject];
CGPoint location = [myTouch locationInView:[myTouch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
b2Vec2 locationWorld = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);
if (_paddleFixture->TestPoint(locationWorld)) {
b2MouseJointDef md;
md.bodyA = groundBody;
md.bodyB = _paddleBody;
md.target = locationWorld;
md.collideConnected = true;
md.maxForce = 1000.0f * _paddleBody->GetMass();
_mouseJoint = (b2MouseJoint *)_world->CreateJoint(&md);
_paddleBody->SetAwake(true);
}
}
在线上
location = [[CCDirector sharedDirector] convertToGL:location];
我有这样的错误
(gdb) continue
Program received signal: “EXC_BAD_ACCESS”.
Previous frame inner to this frame (gdb could not unwind past this frame)
Previous frame inner to this frame (gdb could not unwind past this frame)
而且我没有得到原因
请帮帮我,
答案 0 :(得分:0)
很多时候,当您收到EXC_BAD_ACCESS时,您所在的行不是导致问题的行。我详细解释了EXC_BAD_ACCESS是什么以及如何在此处找到它:
http://www.loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html
结果是,通常您正在与已发布的对象进行通信,或者您已损坏指针或堆。以下是最简单的事情:
运行构建和分析,并专门查看它可能会释放太多次的问题。它也可能会抱怨泄漏(您应该修复),但那些不能导致EXC_BAD_ACCESS
使用NSZombiesEnabled运行应用程序(请参阅链接)。这会导致所有对象永远不会释放,但是当它们的retainCount变为0时变成僵尸。如果您尝试向僵尸发送消息,它将在控制台中抱怨导致问题的确切行。
如果这些都不起作用,那么您需要查找指针/堆损坏。最好的方法是启用Guard Malloc(请参阅链接)并使用gdb命令检查堆。