Коды исключений: KERN_PROTECTION_FAILURE в 0x00000000 Ошибка - PullRequest
2 голосов
/ 27 августа 2010
Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000

Что такое ошибка защиты ядра?
Где я могу найти подробную информацию о типе и коде исключения?

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

Вы можете увидеть полный список исключений ядра Mach в /usr/include/mach/exception_types.h.Большинство, если не все, сводятся к тому, что «ваша программа сделала что-то не так».

Как уже сказал вам hotpaw2, в данном случае вы ошиблись: NULL.Вы могли бы сделать это напрямую, в своем собственном коде или косвенно, передав NULL некоторому библиотечному методу или методу фреймворка.Например, передача NULL в качестве одного из аргументов указателя на memcpy является хорошим способом вызвать этот сбой.

Обратите внимание, что отправка сообщения Objective C на nil в порядке - он ничего не делаети возвращает 0. С другой стороны, передача nil в качестве аргумента в сообщении может быть не в порядке.Передача nil там, где он не нужен, может привести к генерированию исключения NSE (которое вызовет сигнал SIGTRAP, а не SIGBUS), или это может привести к некоторому коду, в конечном итоге разыменовывающему NULL.Или это может быть совершенно безвредным.Но вы не должны делать это, если в документации явно не сказано, что все в порядке, потому что в противном случае, даже если это работает сейчас, оно может сломаться позже.

3 голосов
/ 27 августа 2010

ОС не позволяет пользовательскому приложению получать доступ (чтение или запись) к определенным адресам памяти. Адрес 0 (на который указывает нулевой или нулевой указатель) является одним из этих адресов. Очень распространенная причина этого - код, использующий указатель, который никогда не был инициализирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...