Ada*_*Lee 17 xcode objective-c
我收到的代码= 1或代码= 2表示EXC_BAD_ACCESS错误.我想知道code = 1和code = 2之间有什么区别?
Mar*_*n R 29
Code = 1是KERN_INVALID_ADDRESS,code = 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. */