当将应用程序部署到设备时,程序将在几个周期后退出,并出现以下错误:

Program received signal: "EXC_BAD_ACCESS".

程序在iPhone模拟器上运行没有任何问题,只要我一次执行一个指令,它也会调试和运行。一旦我让它再次运行,我将击中EXC_BAD_ACCESS信号。

在这种特殊情况下,它恰好是加速度计代码中的一个错误。它不会在模拟器中执行,这就是它不会抛出任何错误的原因。但是,它将在部署到设备后执行。

这个问题的大多数答案都处理一般的EXC_BAD_ACCESS错误,因此我将保留这个选项,作为可怕的坏访问错误的统称。

EXC_BAD_ACCESS通常是非法内存访问的结果。你可以在下面的答案中找到更多信息。

您以前遇到过EXC_BAD_ACCESS信号吗?您是如何处理它的?


当前回答

我忘记在初始化方法中返回self…;)

其他回答

在过去的四个小时里,我一直在调试和重构代码来解决这个错误。上面的一篇文章让我发现了这个问题:

属性: startPoint = [[DataPoint alloc] init]; startPoint= [DataPointList objectAtIndex: 0]; . . . x = startPoint。X - 10;/ / EXC_BAD_ACCESS

房地产后: startPoint = [[DataPoint alloc] init]; startPoint = [[DataPointList objectAtIndex: 0] retain];

再见EXC_BAD_ACCESS

苹果开发者计划的任何参与者都可以观看2010年的WWDC视频。 有一个很棒的视频:“会话311 -用仪器进行高级内存分析”,展示了在仪器中使用僵尸并调试其他内存问题的一些例子。

要获得登录页面的链接,请单击这里。

我如何处理EXC_BAD_ACCESS

有时候我觉得当一个EXC_BAD_ACCESS错误被抛出时,xcode会在主代码中显示错误。m类没有提供崩溃发生的额外信息(有时)。

在这种情况下,我们可以在Xcode中设置一个异常断点,这样当异常被捕获时,就会设置一个断点,并直接通知用户崩溃已经发生在那一行

在我的例子中,我有一个视图(a),其中我有另一个视图(B)的实例。我忘记了B是a的子类,显然这导致了递归和无休止的分配。修复了EXE_BAD_ACCESS问题。

   class A: UIView {
 
      let b = B()
      .
      .
   }



   class B: A {
     .
     .
   }

我刚刚花了几个小时跟踪一个EXC_BAD_ACCESS,发现NSZombies和其他env vars似乎没有告诉我任何东西。

对我来说,这是一个愚蠢的NSLog声明与格式说明符,但没有参数传递。

NSLog(@"Some silly log message %@-%@");

固定的

NSLog(@"Some silly log message %@-%@", someObj1, someObj2);