Получение ошибки: malloc: *** ошибка для объекта 0xc79e430: двойное освобождение *** установить точку останова в malloc_error_break для отладки - PullRequest
1 голос
/ 14 июня 2011

Я получаю эту ошибку в своем приложении для iPhone.

Ошибка: DemoApp (1874,0xb024f000) malloc: * ошибка для объекта 0xc79e430: двойное освобождение * установить точку останова в malloc_error_break для отладки

В этом представлении я использую код JSON и после анализа данных, отображаемых соответствующим образом, но через несколько минут происходит сбой приложения. Может кто-нибудь мне помочь. Спасибо

Ответы [ 2 ]

4 голосов
/ 15 июня 2011

Для любых ошибок EXC_BAD_ACCESS или double free вы обычно пытаетесь отправить сообщение освобожденному объекту. ЛУЧШИЙ способ отследить это - использовать NSZombieEnabled .

Это работает, фактически никогда не освобождая объект, а заключая его в «зомби» и устанавливаяфлаг внутри, который говорит, что обычно он был бы выпущен.Таким образом, если вы попытаетесь получить к нему доступ снова, он все еще будет знать, что было до того, как вы допустили ошибку, и с этим небольшим количеством информации вы обычно можете вернуться назад, чтобы увидеть, в чем проблема.

Это особеннопомогает в фоновых потоках, когда отладчик иногда теряет какую-либо полезную информацию.

ОЧЕНЬ ВАЖНО ЗАМЕЧАТЬ однако вам необходимо на 100% убедиться, что это только в вашем коде отладки ине ваш код распространения.Поскольку ничего не выпускается, ваше приложение будет течь и течь и течь.Чтобы напомнить мне сделать это, я поместил этот журнал в моем appdelegate:

if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled"))
  NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");
0 голосов
/ 15 июня 2011

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

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