线程1:编程接收信号:" EXC_BAD_ACCESS"

时间:2011-12-09 20:50:01

标签: iphone exc-bad-access

我目前正在为我的成熟度研究编写iPhone应用程序。但有一种我不理解的行为:有时当我编译我的项目时,有:

  

线程1:编程接收信号:“EXC_BAD_ACCESS”。

但是,当我编译相同的代码一秒钟,或第三次代码运行正常,我无法得到原因。我使用了一些MonteCarloSimulation,但是当它失败时,它无法执行前100次模拟中的一次。但是当每件事情都运行良好时,它会执行1000000次模拟而没有错误。真的很奇怪不是吗?

你知道吗?这可能是Xcode或arc的问题吗? 所有其他事情都很完美。 你还需要获得更多信息吗?我也可以将您的代码作为电子邮件发送给您。

2 个答案:

答案 0 :(得分:1)

这通常意味着您正在尝试访问已经解除分配的对象。

为了调试这些东西,Objective C使用了一个名为“NSZombie”的东西来保存这些对象,这样你至少可以看到它试图被调用的东西。有关如何使用它的一些详细信息,请参阅this question

答案 1 :(得分:0)

这通常是由访问已损坏的某些内存引起的,您可能会引用已删除的对象。很多时候您可能会发现对象所在的内存尚未被覆盖,因此当您尝试访问该内存时,您的数据仍然完好无损并且没有问题,因此它会在某些时候工作。 / p>

另一种情况是你有一些代码使用错误的引用写入内存,所以你写的是你不应该写的区域。根据程序启动时的内存布局,这可能在某些时候没有任何影响,但在其他时候会造成灾难性的后果。