我收到代码=1 或代码=2 的 EXC_BAD_ACCESS 错误。我想知道code=1和code=2有什么区别?
问问题
3377 次
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 回答