【问题标题】:EXC_BAD_ACCESS when replaceObject called on an NSMutableArray在 NSMutableArray 上调用 replaceObject 时的 EXC_BAD_ACCESS
【发布时间】:2010-07-22 19:36:02
【问题描述】:

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

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

我输入了 NSLog 语句以确保 myMisbehaveArray 指向某个东西,但当我运行程序时,我在 replaceObjectAtIndex 方法处得到一个 EXC_BAD_ACCESS。

有什么想法吗?

【问题讨论】:

  • 好吧,在那之前你用它做什么?另外,它是局部变量还是 ivar?它是如何初始化的,等等。 pp.

标签: objective-c nsmutablearray


【解决方案1】:

我写这些博客文章是为了帮助人们调试 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 的无害操作时,您很可能在此之前已经损坏了堆。 myMisbehaveArray 可能指向一个数组,但还涉及许多其他指针。

如果您能够以非常简单的方式可靠地重现问题,那么这行代码就像一个堆损坏检测器。您可以四处移动它,看看它在哪里崩溃,在哪里没有崩溃,以尝试缩小问题的范围。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2017-04-03
    • 2011-02-25
    • 1970-01-01
    • 2010-12-17
    • 2012-10-12
    相关资源
    最近更新 更多