当在NSMutableArray上调用replaceObject时,EXC_BAD_ACCESS

时间:2010-07-22 19:36:02

标签: objective-c nsmutablearray

我正在尝试替换NSMutableArray中的对象。在我班上的其他地方,我成功地做到了。下面是代码失败的示例。

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

我投入了NSLog语句,以确保myMisbehavingArray指向某个东西而且它是,但是当我运行程序时,我在replaceObjectAtIndex方法点获得了一个EXC_BAD_ACCESS。

任何想法?

1 个答案:

答案 0 :(得分:0)

我写了这些博客条目来帮助人们调试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可能指向一个数组,但还有许多其他指针。

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

更难但更可靠的方法是启用Guard Malloc,然后使用调试器打开额外的检查:

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