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

Program received signal: "EXC_BAD_ACCESS".

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

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

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

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

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


当前回答

在12 Pro Max上尝试分配140000xScreen高度的ScrollView空间时EXC_BAD_ACCESS错误。它的分配很好,直到达到140,000像素的宽度。;)

其他回答

在创建字符串时不要忘记@符号,将c -string作为nsstring将导致EXC_BAD_ACCESS。

用这个:

@"Some String"

而不是这样:

"Some String"

PS——通常是在填充包含大量记录的数组内容时。

在EXC_BAD_ACCESS异常发生之前捕捉异常的另一种方法是XCode 4+中的静态分析器。

使用Product > Analyze (shift+cmd+B)运行静态分析器。 单击分析器生成的任何消息将在您的源上覆盖一个图表,该图表显示了保留/释放违规对象的顺序。

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

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

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

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

再补充一种可能发生这种情况的情况:

我有密码:

NSMutableString *string;
[string   appendWithFormat:@"foo"];

显然,我忘记了为字符串分配内存:

NSMutableString *string = [[NSMutableString alloc] init];
[string   appendWithFormat:@"foo"];

解决问题。