【问题标题】:what's the difference between code=1 and code=2 in EXC_BAD_ACCESS?EXC_BAD_ACCESS 中的 code=1 和 code=2 有什么区别?
【发布时间】:2014-05-10 20:55:10
【问题描述】:

我收到代码=1 或代码=2 的 EXC_BAD_ACCESS 错误。我想知道code=1和code=2有什么区别?

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

    代码 = 1 是 KERN_INVALID_ADDRESS,代码 = 2 是 KERN_PROTECTION_FAILURE。两者都是 在"Technical Note TN2123 CrashReporter"中解释:

    最常见的异常形式是:

    • EXC_BAD_ACCESS/KERN_INVALID_ADDRESS — 这是由线程引起的 访问未映射的内存。它可能由数据访问触发 或取指令;线程状态部分描述了如何 说出区别。
    • EXC_BAD_ACCESS/KERN_PROTECTION_FAILURE — 这是 由试图写入只读内存的线程引起。这是 总是由数据访问引起的。

    代码定义在<mach/kern_return.h>:

    #define KERN_INVALID_ADDRESS            1
                    /* Specified address is not currently valid.
                     */
    
    #define KERN_PROTECTION_FAILURE         2
                    /* Specified memory is valid, but does not permit the
                     * required forms of access.
                     */
    

    <mach/exception_types.h> 中记录了代码 对于 EXC_BAD_ACCESS 是 kern_return_t:

    #define EXC_BAD_ACCESS          1       /* Could not access memory */
                    /* Code contains kern_return_t describing error. */
                    /* Subcode contains bad memory address. */
    

    【讨论】:

    • 在 Unix 术语中,它与 SIGBUS 和 SIGSEGV 的区别相同。
    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 2020-02-05
    • 2021-08-26
    • 2015-11-23
    • 2016-03-06
    • 2017-09-12
    • 2019-07-11
    相关资源
    最近更新 更多