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

Program received signal: "EXC_BAD_ACCESS".

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

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

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

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

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


当前回答

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

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

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

其他回答

再补充一下

Lynda.com有一个很棒的DVD叫

iPhone SDK基本培训

第6章第3课是关于EXEC_BAD_ACCESS和使用僵尸的。

这对我来说是很好的理解,不仅是错误代码,而且我如何使用僵尸来获得更多关于释放对象的信息。

我只是遇到了这个问题。对我来说,原因是删除一个CoreData管理对象,然后试图从另一个地方读取它。

如果您正在使用自定义字体,并且以编程方式实例化它们,则如果您之前没有在运行时注册字体,则会发生此错误。

为了确保是这样,Xcode控制台将打印如下内容:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x1d8)
    frame #0: 0x0000000180f969cc CoreText`CTFontGetClientObject + 12
...

or

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
    frame #0: 0x000000012341c10e CoreFoundation`CFRelease.cold.1 + 14
    frame #1: 0x00000001232ed7bd CoreFoundation`CFRelease + 77
    frame #2: 0x0000000128136990 libGSFont.dylib`GSFontGetExtraData + 112
    frame #3: 0x0000000135bc8958 UIFoundation`-[UIFont lineHeight] + 9
    frame #4: 0x00000001340149f3 UIKitCore`-[UILabel intrinsicContentSize] + 331
...

要注册自定义字体并解决该问题,可以签出此解决方案:https://stackoverflow.com/a/69756114/3701102

EXC_BAD_ACCESS

EXC_BAD_ACCESS访问已经释放的对象。内核发送这个异常(EXC),表示内存块不能被访问(BAD ACCESS)。

使用[无主(不安全)] 当一个目标器使用另一个目标器时,IPHONEOS_DEPLOYMENT_TARGET[About]。在我的例子中,Test target(10.0)使用了显式依赖[About]与14.0 IPHONEOS_DEPLOYMENT_TARGET

在我的例子中,它是由tableview删除操作引起的。这个解决方案解决了我的坏访问异常:https://stackoverflow.com/a/4186786/538408