【发布时间】:2014-05-10 20:55:10
【问题描述】:
我收到代码=1 或代码=2 的 EXC_BAD_ACCESS 错误。我想知道code=1和code=2有什么区别?
【问题讨论】:
标签: objective-c xcode
我收到代码=1 或代码=2 的 EXC_BAD_ACCESS 错误。我想知道code=1和code=2有什么区别?
【问题讨论】:
标签: objective-c xcode
代码 = 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. */
【讨论】: