Что означает SEGV_ACCERR?
Я рассматриваю несколько сбоев, которые имеют сигнал SIGSEGV по причине SEGV_ACCERR. После поиска SEGV_ACCERR, ближайшая вещь, которую я нашел для понятного человеку объяснения: Недопустимые разрешения для объекта
Что это значит в более общем смысле? Когда возникнет SEGV_ACCERR? Есть ли более конкретная документация по этой причине?
Ответы
Ответ 1
Это ошибка, которую я чаще всего наблюдаю на 64-битных iOS-устройствах, и может произойти, если несколько потоков прочитают и изменят переменную в ARC. Например, сегодня я исправил сбой, когда читали несколько фоновых потоков, используя статическую NSDate и переменную NSString и обновляя их без каких-либо блокировок или очередей.
Использование основных объектов данных в нескольких потоках также может привести к этому сбою, как я видел много раз в журналах аварий.
Я также использую Crittercism, и этот конкретный сбой был SEGV_ACCERR, который затронул только 64-разрядные устройства.
Ответ 2
Я видел это в случаях, когда код пытается выполнить из других мест, кроме "text".
Например, если ваш указатель указывает на функцию в куче или стеке, и вы пытаетесь выполнить этот код (из кучи или стека), CPU выдает это исключение.