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

Program received signal: "EXC_BAD_ACCESS".

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

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

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

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

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


当前回答

我得到它,因为我没有使用[self performSegueWithIdentifier:sender:]和-(void) prepareForSegue:(UIstoryboardSegue *)正确

其他回答

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

产品->清洁

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

忘记从dealloc中取出一个非alloc指针。我在我的UINavigationController的rootView上获得了exc_bad_access,但只是有时。我假设问题出在rootView上,因为它在viewDidAppear{}中崩溃了。它只发生在我用坏的dealloc{}发布弹出视图之后,这就是它!

"EXC_BAD_ACCESS"[切换到进程330]现在没有可用的内存来编程:调用malloc不安全

我认为这是一个问题,我试图分配…不是在我试图释放非alloc的地方,天哪!

EXC_BAD_ACCESS信号是向系统调用传递无效指针的结果。我今天早些时候在OS X上用一个测试程序得到了一个-我传递了一个未初始化的变量到pthread_join(),这是由于早期的拼写错误。

我不太熟悉iPhone开发,但是你应该仔细检查你传递给系统调用的所有缓冲指针。一直提高编译器的警告级别(使用gcc时,使用-Wall和-Wextra选项)。在模拟器/调试器上启用尽可能多的诊断。

我知道之前有人问过这个问题,但是在读了这个帖子之后,我找到了XCode 4.2的解决方案: Product -> Edit Scheme -> Diagnostics Tab ->启用僵尸对象

帮助我找到一个消息被发送到一个释放对象。

使用简单的规则“如果你没有分配或保留它,就不要释放它”。