23

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

4

1 回答 1

34

代码 = 1 是 KERN_INVALID_ADDRESS,代码 = 2 是 KERN_PROTECTION_FAILURE。两者都在“技术说明 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. */
于 2013-11-02T13:30:08.343 回答