Получен сигнал 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 ]

4 голосов
/ 17 февраля 2010

Используйте простое правило: «если вы его не распределили или не сохранили, не выпускайте его».

4 голосов
/ 15 сентября 2010

Как отладить EXC_BAD_ACCESS

Проверьте ссылку выше и сделайте, как говорится .... Просто несколько быстрых инструкций по использованию NSZombies

Запустите приложение и после его сбоя (должно отображаться «Прервано», а не «EXC_BAD_ACCESS» ... проверьте консоль («Выполнить»> «Консоль») ... там должно появиться сообщение, сообщающее, к какому объекту оно пытается получить доступ .

-Бен

3 голосов
/ 04 марта 2010

Забыл вынуть не распределенный указатель из dealloc. Я получал exc_bad_access на моем rootView UINavigationController, но только иногда. Я предположил, что проблема была в rootView, потому что он сбой на полпути через его viewDidAppear {}. Это случилось только после того, как я опубликовал представление с выпуском bad dealloc {}, и все!

"EXC_BAD_ACCESS" [Переключение на процесс 330] Нет доступной памяти для программы сейчас: небезопасно вызывать malloc

Я думал, что это проблема, когда я пытался распределить ... не там, где я пытался выпустить нераспределенный, черт!

3 голосов
/ 09 февраля 2010

Я забыл вернуть себя в методе init ...;)

3 голосов
/ 28 июня 2010

Я столкнулся с EXC_BAD_ACCESS на iPhone только при попытке выполнить метод C, который включал большой массив. Симулятор смог дать мне достаточно памяти для запуска кода, но не устройства (массив был миллион символов, так что это было слишком много!).

EXC_BAD_ACCESS произошел сразу после точки входа метода, и некоторое время меня смущало, потому что это было далеко от объявления массива.

Возможно, кому-то еще может пригодиться моя пара потянув за волосы несколько часов.

3 голосов
/ 16 мая 2009

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

Недвижимость до: startPoint = [[DataPoint alloc] init]; startPoint = [DataPointList objectAtIndex: 0];
, , , x = startPoint.x - 10; // EXC_BAD_ACCESS

Недвижимость после: startPoint = [[DataPoint alloc] init]; startPoint = [[DataPointList objectAtIndex: 0] сохранить];

До свидания EXC_BAD_ACCESS

3 голосов
/ 03 мая 2010

Это отличная тема. Вот мой опыт: я перепутал ключевое слово retain / assign в объявлении свойства. Я сказал:

@property (nonatomic, assign) IBOutlet UISegmentedControl *choicesControl;
@property (nonatomic, assign) IBOutlet UISwitch *africaSwitch;
@property (nonatomic, assign) IBOutlet UISwitch *asiaSwitch;

где я должен был сказать

@property (nonatomic, retain) IBOutlet UISegmentedControl *choicesControl;
@property (nonatomic, retain) IBOutlet UISwitch *africaSwitch;
@property (nonatomic, retain) IBOutlet UISwitch *asiaSwitch;
3 голосов
/ 24 августа 2009

Надеюсь, вы отпустите «строку», когда закончите!

3 голосов
/ 07 января 2014

Как я справляюсь с EXC_BAD_ACCESS

Иногда мне кажется, что при возникновении ошибки EXC_BAD_ACCESS xcode покажет ошибку в классе main.m, не давая дополнительной информации о том, где происходит сбой (иногда).

В те времена мы можем установить Исключительную точку останова в XCode, чтобы при обнаружении исключения была установлена ​​точка останова, которая непосредственно информировала бы пользователя о сбое в этой строке

enter image description here

2 голосов
/ 10 декабря 2009

У меня просто была эта проблема. Для меня причина была в том, что я удалил управляемый объект CoreData и попытался прочитать его потом из другого места.

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