xcode工具查找内存问题,访问另一个变量ecc的位置的指针

问题描述

| 我正在使用cocos2d,但是问题很普遍。 我有一堂课
CCNode *scaleLayer
我设置的touchesMoved事件
scaleLayer.scale=(some calculation)
如果我在设备上编译,程序会崩溃,在模拟器上效果很好。 如果我将nslogs放在之前的指令之前,即使在设备中也能正常工作。 可能是一些内存,指针还是什么? 但是,存在一个xcode工具,可以使我发现或理解我的眼光在哪里? 谢谢 这是代码
- (void)cctouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *alltouches = [event alltouches];
//NSLog(@\"comincio\");
switch ([alltouches count]) {
    case 2: { //Double Touch
        UITouch *t1 = [[alltouches allObjects] objectAtIndex:0];
        UITouch *t2 = [[alltouches allObjects] objectAtIndex:1];
        CGPoint p1=[self convertTouchToNodeSpace: t1];
        CGPoint p2=[self convertTouchToNodeSpace: t2];                  

        initialdistance = [self distanceBetweenTwoPoints:p1 B:p2];
        oldScale=scaleLayer.scale;
        NSLog(@\"distanza iniz %f\",initialdistance);
    } break;
            default:
        break;
}
}

-(void)cctouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    CGPoint location;   
    UITouch *t1,*t2;    
    CGPoint p1,p2;

    NSSet *allTouces=[event alltouches];
    switch ([allTouces count]) {
case 2:
            //NSLog(@\"2 tocchi\");
            t1=[[allTouces allObjects] objectAtIndex:0];
            t2=[[allTouces allObjects] objectAtIndex:1];
            p1=[self convertTouchToNodeSpace: t1];
            p2=[self convertTouchToNodeSpace: t2];
            CGFloat finaldistance=[self distanceBetweenTwoPoints:p1 B:p2];
//if i put here NSLog(\"%f %f %f\",oldScale,finaldistance,initialdistance); all goes well
            scaleLayer.scale=oldScale*finaldistance/initialdistance;
            NSLog(@\"scala %f\",scaleLayer.scale);//finaldistance/initialdistance);
//this nslog give me error if i not put that nslog before
            break;

        default:
            break;
    }
}

-(CGFloat)distanceBetweenTwoPoints:(CGPoint)A B:(CGPoint)B{
    float x=B.x-A.x;
    float y=B.y-A.y;
    return sqrt(x*x+y*y);
}

解决方法

尝试使用静态分析器进行构建(Shift-Command-A) 尝试查看内存地址。以下是一些帮助您入门的链接: scottmpeak.com和SO讨论,您可以使用的一种选择是僵尸,它已经在stackoverflow中得到了解释,因此在这里我不再做。 但是,如果遇到EXC_BAD_ACCESS类型的错误,则可以添加异常断点。有时也有帮助。这些是这样做的步骤 在断点导航器的左下角,单击加号 按钮。 在弹出窗口中,选择\“添加例外断点\” 选择例外类型。我通常选择“全部”例外 单击完成。 苹果在这里对此进行了解释。