Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone xcode工具查找内存问题,访问指向另一个变量ecc位置的指针_Iphone_Ios_Objective C_Memory Management - Fatal编程技术网

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

Iphone xcode工具查找内存问题,访问指向另一个变量ecc位置的指针,iphone,ios,objective-c,memory-management,Iphone,Ios,Objective C,Memory Management,我使用的是cocos2d,但问题是一般性的。 我有一节课 CCNode *scaleLayer 在TouchsMoved事件中,我设置了 scaleLayer.scale=(some calculation) 如果我在设备中编译,程序就会崩溃,在模拟器上运行良好。 如果我将nslogs放在前面的指令之前,即使在设备中也能很好地工作。 可能是内存、指针或是什么? 然而,是否存在一个xcode工具,可以让我找到或理解我的眼睛指向何处? 谢谢 代码如下: - (void)ccTouchesBega

我使用的是cocos2d,但问题是一般性的。 我有一节课

CCNode *scaleLayer
在TouchsMoved事件中,我设置了

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-A命令构建

尝试查看内存地址。以下是一些帮助您入门的链接: 您可以使用的一个选项是,stackoverflow中已经解释了这一点,所以我不打算在这里做

但是,如果您遇到EXC\u BAD\u访问类错误,您可以添加一个异常断点。这有时也有帮助。这些是实现这一目标的步骤

在断点导航器的左下角,单击加号 按钮 在弹出窗口中,选择添加异常断点 选择异常的类型。我通常选择所有例外 单击完成。
苹果对此做出了解释

在哪里初始化scaleLayer变量?如果未初始化,则在模拟器上可能为空,因此在执行此操作时发送消息时不会发生任何情况。缩放但设备上未初始化的垃圾会导致崩溃。崩溃日志是什么..什么类型的崩溃..访问错误?scaleLayer.scale在init函数中初始化为=1,并且正确显示作为子级添加的内容。当我尝试更改TouchsMoved中的比例时,程序会显示_scaleX!=_斯卡利不知道该退哪一个。但是我改变了。尺度,不仅仅是一个,我也只见过一次,那变量包含了通过尺度的计算,给楠我觉得不是一个数字。我认为某个指针正在访问内存的某个区域,从而意外地改变了该值。静态分析器没有发现任何问题,就像我读过scottmpeak.com一样,但要使用malloc.c和ckheap.h,我必须覆盖一些内容,或者只是将它们添加到我的项目中?尝试过,但scaleLayer不是僵尸,它永远不会被释放,而此链接可能会回答这个问题,最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。是@Monolo我理解您的担忧。。当我链接到stackoverflow或官方文档之外的页面时,我通常会在这里自己解释答案。。在本例中,stackoverflow中已经解释了僵尸的用法,因此无需再次解释。。