iPhone - отладка ошибок "освобожден указатель не выделен" - PullRequest
7 голосов
/ 17 ноября 2008

При освобождении указателя вы можете увидеть ошибку, такую ​​как

"освобожденный указатель не выделен"

При отладке с помощью симулятора я добавляю аргумент сборки MallocStackLogging = YES - это позволяет мне использовать malloc_history в терминале для отслеживания того, где я перегрузил указатель.

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

Как ни странно, некоторые ошибки указателя появляются на устройстве, но не на симуляторе.

Кто-нибудь имел опыт отслеживания их с помощью самого устройства?

Спасибо!

Ответы [ 4 ]

9 голосов
/ 15 декабря 2009

Еще один способ сделать это. Обязательно включите NSZombie, чтобы он сообщал адрес памяти объекта, который получает дополнительную версию. Затем запустите с Performance Tool-> Object Allocations. Это поднимет инструменты. Посмотрите журнал консоли, предоставленный организатором Xcode. Как только вы получите сбой, ищите адрес памяти в приборах. Вы увидите всю историю mallocs / освобождения для этого объекта, а также ссылки прямо в ваш код.

1 голос
/ 17 ноября 2008

Я обычно использую NSZombie для таких вещей, отметьте this out

0 голосов
/ 25 января 2012

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

Совет. Вы можете проверить утечки, проанализировав свой проект (нажмите Shift + команда + k)

0 голосов
/ 12 июня 2009

Вам необходимо установить переменные env MallocStackLogging для целевого исполняемого файла ...

Чтобы получить доступ к этим настройкам, выберите свой исполняемый файл на панели «Группы и файлы» в XCode, затем выберите «Информация».

Перейдите на вкладку «Аргументы» и добавьте следующие записи в поле «Переменные для установки в среде»:

...