当在NSMutableArray上调用replaceObject时EXC_BAD_ACCESS

问题描述:

我试图替换NSMutableArray中的对象。在我班的其他地方,我成功地做到了。下面是代码失败的一个例子。当在NSMutableArray上调用replaceObject时EXC_BAD_ACCESS

NSNumber* newObject = [NSNumber numberWithDoulble:myCalculation]; 
NSLog(@"Old object at 12:%@",[myMisbehavingArray objectAtIndex:12]; 
[myMisbehavingArray replaceObjectAtIndex:12 withObject:newObject]; 

我在的NSLog声明扔确保myMisbehavingArray指着东西,它是,但是当我运行程序我在replaceObjectAtIndex方法的角度得到一个EXC_BAD_ACCESS。

任何想法?

+0

那么,什么是你用它之前在做什么?另外,它是一个本地变量还是伊娃?它是如何初始化的,等等。 – 2010-07-22 19:42:17

我写这些博客文章,以帮助人们调试EXC_BAD_ACCESS

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

http://loufranco.com/blog/files/debug-iphone-crash-EXC_BAD_ACCESS.html

当你做一些无关痛痒的结果在EXC_BAD_ACCESS,它很可能是您之前损坏堆。 myMisbehavingArray可能指向一个数组,但还有许多其他指针参与其中。

如果你能够以一种非常简单的方式可靠地重现问题,这行代码就像一个堆腐败检测器。你可以移动它,看看它崩溃的地方,以及它不会试图缩小事情变坏的地方。

更硬,更可靠的方法,是使民警卫队的malloc,然后使用调试器来打开额外的检查:

http://developer.apple.com/iphone/library/documentation/Performance/Conceptual/ManagingMemory/Articles/MallocDebug.html