Получи случайную криптовалюту за регистрацию!

Что означает EXC_BAD_ACCESS? Вероятнее всего, однажды вы стол | iOS Dev

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

Вероятнее всего, однажды вы столкнетесь (а скорее всего, уже сталкивались) с крашем, вызванным EXC_BAD_ACCESS. Так что же это на самом деле?

Всякий раз, когда вы встречаете EXC_BAD_ACCESS, это означает, что вы отправляете сообщение объекту, который уже был освобожден. Это самый распространенный сценарий, но есть и другие.

Техническое объяснение сложнее

В нашей работе мы постоянно имеем дело с указателями.
Указатель — это не что иное, как переменная, в которой хранится адрес памяти другой переменной.

Когда вы отправляете сообщение объекту, указатель, который указывает на объект, которому вы отправляете сообщение, должен быть разыменован (dereferenced). Это означает, что вы берете адрес памяти, на который указывает указатель, и получаете доступ к значению этого блока памяти.

Когда этот блок памяти больше не задействован для вашего приложения или, другими словами, этот блок памяти не используется для того, для чего вы думаете, доступ к этому участку (фрагменту) памяти больше невозможен.

Когда это происходит, ядро ​​отправляет исключение (EXC), указывающее, что ваше приложение не может получить доступ к этому блоку памяти (тот самый BAD_ACCESS).

Таким образом, когда вы сталкиваетесь с EXC_BAD_ACCESS, это означает, что вы пытаетесь отправить сообщение в блок памяти, который не может выполнить это сообщение.

Однако в некоторых случаях EXC_BAD_ACCESS вызван поврежденным указателем. Всякий раз, когда ваше приложение пытается разыменовать поврежденный указатель, ядро ​​выдаёт исключение.

Основные причины для EXC_BAD_ACCESS

Использование памяти, которая была освобождена.

Попытка записи за конец массива или буфера другого типа.

Использование указателя, который не был инициализирован.

Что почитать на эту тему?

Debugging EXC_BAD_ACCESS

EXC_BAD_ACCESS crash error: Understanding and solving it

@iOS Dev — о том, что мы иногда можем встретить