Ответ 1
Код = 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. */