Что означает SEGV_ACCERR?

Я рассматриваю несколько сбоев, которые имеют сигнал SIGSEGV по причине SEGV_ACCERR. После поиска SEGV_ACCERR, ближайшая вещь, которую я нашел для понятного человеку объяснения: Недопустимые разрешения для объекта

Что это значит в более общем смысле? Когда возникнет SEGV_ACCERR? Есть ли более конкретная документация по этой причине?

Ответ 1

Это ошибка, которую я чаще всего наблюдаю на 64-битных iOS-устройствах, и может произойти, если несколько потоков прочитают и изменят переменную в ARC. Например, сегодня я исправил сбой, когда читали несколько фоновых потоков, используя статическую NSDate и переменную NSString и обновляя их без каких-либо блокировок или очередей.

Использование основных объектов данных в нескольких потоках также может привести к этому сбою, как я видел много раз в журналах аварий.

Я также использую Crittercism, и этот конкретный сбой был SEGV_ACCERR, который затронул только 64-разрядные устройства.

Ответ 2

Я видел это в случаях, когда код пытается выполнить из других мест, кроме "text".

Например, если ваш указатель указывает на функцию в куче или стеке, и вы пытаетесь выполнить этот код (из кучи или стека), CPU выдает это исключение.