Iphone 随机代码影响无关代码

Iphone 随机代码影响无关代码,iphone,objective-c++,Iphone,Objective C++,我正在用objective c制作一个iPhone游戏,里面有cocos2d和box2d,还有桨、球、砖块——没有什么特别的,桨的处理代码对x和y运动都非常有效。我在另一个函数中添加了径向重力代码,但这就是它变得奇怪的地方。代码没有被调用,只是位于一个方法中,它打破了完全不相关的代码 更奇怪的是,我在另一个类中添加了一个nslog,它将混乱从不在x上移动切换到不在y上移动并开始移动x。我可以注释掉随机的代码位,然后它开始工作或重新破解。我可以将box2d代码移出并移动它,它是否工作。一切都是随机

我正在用objective c制作一个iPhone游戏,里面有cocos2d和box2d,还有桨、球、砖块——没有什么特别的,桨的处理代码对x和y运动都非常有效。我在另一个函数中添加了径向重力代码,但这就是它变得奇怪的地方。代码没有被调用,只是位于一个方法中,它打破了完全不相关的代码

更奇怪的是,我在另一个类中添加了一个nslog,它将混乱从不在x上移动切换到不在y上移动并开始移动x。我可以注释掉随机的代码位,然后它开始工作或重新破解。我可以将box2d代码移出并移动它,它是否工作。一切都是随机的

有人知道这是什么原因吗?objective-C中是否有最大的方法大小?I可能会溢出,此类中的一个方法相当大?有什么想法吗

这是一些代码,如果不是相同的代码,盒体刚刚翻转,则有一个匹配的代码。在不同的物理体相互作用的情况下,还有很多类似的情况。如果我对他们中的任何一个都发表评论,那就行了。不是,也不是

if (spriteA.tag == kSpritePowerUp && spriteB.tag == kSpritePaddle) {
  if (std::find(toDestroy.begin(), toDestroy.end(), bodyB) == toDestroy.end()) {
    PowerUp *tempPowerUp = (PowerUp*)bodyA->GetUserData();//spriteA;
    Paddle* tempPaddle = (Paddle*)bodyB->GetUserData();//spriteB;
    [tempPaddle addPowerUp:tempPowerUp];
    [self playSoundEffect:kGameSoundPowerUp];
    toDestroy.push_back(bodyA);
  }
}
编辑:已解决 我每节课都一行一行地复习。 我查了一下漏洞,找到了2个


但最后,结果证明是一个实用函数中的两个局部布尔值,我依赖它自动初始化为false。就像大多数时候一样,但有时不会。没有特别的原因。月相之类的。

恶心。首先,我感同身受。我们都去过那里

几乎百分之百确定的是,你的内存处理中有一个bug——你正在用其他东西覆盖一个对象,或者通常在一些你不打算使用的内存上浪费时间,而副作用只是潜在的随机性

首先在Xcode中运行静态分析器(在构建中)——这将确定一些明显的内存问题,但这些不一定是您看到的

在这里,注释大块内容可能是一个有用的调试工具——找出出现的功能会导致奇怪的事情发生。从那里缩小范围


(如果您确定某个特定的内存块以某种方式被垃圾占据,您可能可以设置一个内存断点。我不知道如何在Xcode/GDB中实现这一点,希望其他人能够做到。)

真恶心。首先,我感同身受。我们都去过那里

几乎百分之百确定的是,你的内存处理中有一个bug——你正在用其他东西覆盖一个对象,或者通常在一些你不打算使用的内存上浪费时间,而副作用只是潜在的随机性

首先在Xcode中运行静态分析器(在构建中)——这将确定一些明显的内存问题,但这些不一定是您看到的

在这里,注释大块内容可能是一个有用的调试工具——找出出现的功能会导致奇怪的事情发生。从那里缩小范围


(如果您确定某个特定的内存块以某种方式出现垃圾,您可能可以设置一个内存断点。我不知道如何在Xcode/GDB中执行此操作,希望其他人会这样做。)

您确定在构建时设置了-DNO_怪异_代码标志吗?说真的,如果没有一些特定的代码,我们在这里完全不知所措。你确定你在构建时设置了-DNO_怪异_代码标志吗?说真的,没有一些特定的代码,我们在这里完全不知所措。我不能显示任何特定的代码,因为它可以在任何地方。我有一个大记号处理box2d碰撞和交互。我可以在tick的任何地方评论大约20行,然后它就开始工作了。任何20行,哪一行都不重要。我有另一个不相关的类,添加了nslog,它完全改变了。它似乎连接到box2d body->ApplyForce(…),但没有任何合理的模式。我也要试试静态分析器。有人听说过在目标c中是否存在方法大小溢出吗?您对“方法大小溢出”有什么看法?您提到“这个类中有一个方法相当大”。。。你的意思是说这个方法在堆栈上放了很多东西吗?或者你指的是别的什么?@Michael——我不知道Obj-C中一个方法的实际gcc大小限制(代码行)是多少,但如果你超过了它,我会感到惊讶。在这一个刻度中大约有500行代码和注释。它将通过物理世界中的所有接触,并根据它做出决策。很难把这些部件重构出来。但是确实有很多临时变量被创建了。没有内存问题(除此之外)。我的想法是,方法大小和传递到其他地方的内存访问可能有一个上限?!?老实说,我一点也不知道。@Michael 500行代码绝对不会成为你问题的根源@吉诃多是对的。。。您遇到内存损坏问题。检查您的代码(不仅仅是500行方法,而是整个程序),以查看您在哪里错误分配、错误转换或过早释放此500行方法使用的对象/数据结构。你所描述的正是内存问题。“它可以在任何地方”这句话是这里的大旗。。。当您在代码的随机部分看到随机行为时,说明您对内存的管理不正确。我无法显示任何特定代码,因为它可以在任何地方。我有一个大记号处理box2d碰撞和交互。我可以在tick的任何地方评论大约20行,然后它就开始工作了。任何20行,哪一行都不重要。我有另一个不相关的类,添加了nslog,它完全改变了。它似乎连接到box2d body->ApplyForce(…),但没有任何合理的模式。我也要试试静态分析器。有人听说过在目标c中是否存在方法大小溢出吗?您对“方法大小溢出”有什么看法?您提到“这个类中的一个方法非常有用