Получен сигнал EXC_BAD_ACCESS - PullRequest
281 голосов
/ 29 ноября 2008

При развертывании приложения на устройстве программа закроется через несколько циклов со следующей ошибкой:

Program received signal: "EXC_BAD_ACCESS".

Программа работает без проблем на симуляторе iPhone, она также будет отлаживаться и запускаться, пока я выполняю инструкции по одной за раз. Как только я снова включу его, я нажму на сигнал EXC_BAD_ACCESS.

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

Большинство ответов на этот вопрос имеют дело с общей ошибкой EXC_BAD_ACCESS, поэтому я оставлю это открытым как универсальное средство для страшной ошибки Bad Access.

EXC_BAD_ACCESS обычно выбрасывается в результате недопустимого доступа к памяти. Вы можете найти больше информации в ответах ниже.

Вы когда-нибудь сталкивались с сигналом EXC_BAD_ACCESS и как с ним справлялись?

Ответы [ 32 ]

2 голосов
/ 14 февраля 2012

Я понимаю, что об этом спрашивали некоторое время назад, но после прочтения этой темы я нашел решение для XCode 4.2: Продукт -> Редактировать схему -> Вкладка Диагностика -> Включить объекты зомби

Помог мне найти сообщение, отправляемое на освобожденный объект.

2 голосов
/ 30 ноября 2008

Вызовы NSAssert () для проверки параметров метода очень удобны для отслеживания и предотвращения передачи nils.

2 голосов
/ 23 февраля 2011

Чтобы проверить, в чем может быть ошибка

Использовать NSZombieEnabled.

Чтобы активировать средство NSZombieEnabled в вашем приложении:

Выберите «Проект»> «Редактировать активный исполняемый файл», чтобы открыть окно информации о исполняемом файле. Нажмите Аргументы. Нажмите кнопку добавления (+) в разделе «Переменные, которые должны быть установлены в среде». Введите NSZombieEnabled в столбце Имя и YES в столбце Значение. Убедитесь, что установлен флажок для записи NSZombieEnabled.

Я нашел этот ответ на iPhoneSDK

2 голосов
/ 31 мая 2009

Я отлаживал и рефакторинг кода для решения этой ошибки в течение последних четырех часов Пост выше привел меня, чтобы увидеть проблему:

Недвижимость до:

startPoint = [[DataPoint alloc] init] ;
startPoint= [DataPointList objectAtIndex: 0];
x = startPoint.x - 10; // EXC_BAD_ACCESS

Имущество после:

startPoint = [[DataPoint alloc] init] ;
startPoint = [[DataPointList objectAtIndex: 0] retain];

До свидания EXC_BAD_ACCESS

Большое спасибо за ваш ответ. Я боролся с этой проблемой весь день. Ты потрясающий!

2 голосов
/ 05 апреля 2010

Просто добавить

Lynda.com имеет фантастический DVD под названием

Базовое обучение iPhone SDK

и глава 6, урок 3, посвящены EXEC_BAD_ACCESS и работе с зомби.

Мне было приятно понять не только код ошибки, но и то, как я могу использовать Зомби, чтобы получить больше информации об освобожденном объекте.

2 голосов
/ 13 апреля 2014

Когда у вас бесконечная рекурсия, я думаю, что вы также можете иметь эту ошибку. Это был случай для меня.

1 голос
/ 02 апреля 2017

Прежде чем что-то делать, попробуйте:

Продукт -> Чистый

И беги снова. Это сработало для меня. Иначе я бы потратил впустую часы.

1 голос
/ 09 марта 2012

XCode 4 и выше, это было сделано очень просто с помощью инструментов. Просто запустите зомби в инструментах. Это руководство объясняет это хорошо: отладка exc_bad_access error xcode instruments

1 голос
/ 22 января 2013

Я получил это, потому что я не использовал [self performSegueWithIdentifier:sender:] и -(void) prepareForSegue:(UIstoryboardSegue *) правильно

1 голос
/ 19 октября 2012

Не забывайте символ @ при создании строк, трактовка C-strings как NSStrings приведет к EXC_BAD_ACCESS.

Используйте это:

@"Some String"

Вместо этого:

"Some String"

PS - обычно при заполнении содержимого array большим количеством записей.

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