iPhone - ошибки отладки "освободившийся указатель не выделен"

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

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

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

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

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

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

Спасибо!

4 ответа

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

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

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

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

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

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

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

Другие вопросы по тегам