EXC_BAD_ACCESS - NSZombie只捕获NSEnableAutoReleasePool = NO修复

时间:2011-06-21 11:27:57

标签: iphone ios

我在随机位置获得EXC_BAD_ACCESS。已经尝试使用NSZombieEnabled = YES但没有任何不同的事情发生。 我正在尝试使用xcode 4.已经尝试过:启用Scribble,启用Guard Edge,启用Guard Malloc(仅适用于模拟器,非常慢!),内存记录等... 没有运气。

任何人都可以建议我尝试寻找缺陷的另一种方法吗?我的选择已经用完了。

先谢谢,

  • 新信息

内部:(void)applicationDidFinishLaunching:(UIApplication *)应用程序

我创建了一个Timer:ASMInterrupt = [NSTimer scheduledTimerWithTimeInterval:1 / 60.0 target:self selector:@selector(interrupiSSao :) userInfo:nil repeats:YES];

一个新线程:[NSThread detachNewThreadSelector:@selector(myBackgroundMethod :) toTarget:self withObject:nil];

在myBackgroundMethod运行之前,计时器将处于循环中。

在myBackgroundMethod中我使用:

    //Beginning of the function
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
EAGLContext *context = [[EAGLContext alloc] initWithAPI: kEAGLRenderingAPIOpenGLES1 sharegroup: [[glView context] sharegroup]];
[EAGLContext setCurrentContext:context];

...        //几个纹理/声音/音乐加载,如下所示:

NSBundle *bundle = [NSBundle mainBundle];
sndMove = [[SoundFx alloc] initWithSound:[bundle pathForResource:@"tetMov" ofType:@"wav"]];

    txParallax[0] = [[Texture2D alloc] initWithImageFile:@"parallax_tst" ofType : @"png" inMode:TEX_RGBA];

NSString * tmpSom = [[NSBundle mainBundle] pathForResource:@“ThorTitle”ofType:@“mp3”];     musMenu = [[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:tmpSom] error:NULL] retain];

...

  //and at the end:
[EAGLContext setCurrentContext:nil];
[context release];
[pool release];

这仅发生在应用程序的开头。并且错误总是发生在: 1)长时间比赛 2)游戏结束后和新游戏 3)游戏结束序列

因此,它可能与该线程没有直接关系。我试图寻找自动释放问题,但所有内容都是用 initWith

分配的

3 个答案:

答案 0 :(得分:1)

尝试使用静态分析器(Xcode 4中的Cmd-Shift-B,Xcode 3中的Cmd-Shift-A)。如果您有一个过度释放的对象或双重免费,它将报告它。

答案 1 :(得分:0)

将仪器中的记忆分配仪器放入。当你崩溃时,你应该能够看到该地址的历史分配和免费事件,包括objective-c引用计数事件。

答案 2 :(得分:0)

显然我正在从它的边界访问一个数组:

int xpto [10] [10];

xpto [10] [5] = 2; ... if(xpto [-1] [8]!= ...

调试器给我一些更好的信息是多么困难。 这就是为什么我迫不及待想要拿到诺基亚WinMo 7手机的原因。 Visual Studio !!!