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

Program received signal: "EXC_BAD_ACCESS".

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

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

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

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

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


当前回答

检查错误可能是什么

使用NSZombieEnabled。

在你的应用程序中激活NSZombieEnabled工具:

选择项目>编辑活动可执行文件打开可执行文件信息窗口。 点击参数。 点击“Variables to be set in the environment”部分中的添加(+)按钮。 “名称”一栏输入“NSZombieEnabled”,“值”一栏输入“YES”。 确保NSZombieEnabled条目的复选标记被选中。

我在iphoneonesdk上找到了这个答案

其他回答

当你有无限递归的时候,我认为你也会有这个错误。这是我的案子。

在你做任何事情之前,你应该尝试:

产品->清洁

然后再跑。这对我很管用。否则,我会浪费好几个小时。

甚至还有另一种可能:在队列中使用块,很容易发生你试图访问另一个队列中的对象,这个对象此时已经被取消分配了。通常当你试图向GUI发送一些东西时。 如果异常断点设置在一个陌生的位置,那么这可能是原因所在。

这是一个很好的帖子。以下是我的经验:我在属性声明中搞砸了retain/assign关键字。我说:

@property (nonatomic, assign) IBOutlet UISegmentedControl *choicesControl;
@property (nonatomic, assign) IBOutlet UISwitch *africaSwitch;
@property (nonatomic, assign) IBOutlet UISwitch *asiaSwitch;

我该说什么来着

@property (nonatomic, retain) IBOutlet UISegmentedControl *choicesControl;
@property (nonatomic, retain) IBOutlet UISwitch *africaSwitch;
@property (nonatomic, retain) IBOutlet UISwitch *asiaSwitch;

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

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