Как найти переменную, если у меня есть ее адрес в памяти? - PullRequest
3 голосов
/ 05 апреля 2009

в моем заявлении я получаю исключение: MyApp(38431,0xa004ffa0) malloc: *** error for object 0xa08be760: pointer being freed was not allocated

Есть ли способ для XCode показать мне, где находится этот указатель? Как я могу найти, где проблема?

Я знаю, что могу ввести информационную строку * [адрес], и она может показать мне, где находится строка Но теперь это не работает для меня.

Как узнать номер строки или имя переменной, в которую выдается исключение?

Спасибо заранее, Илья

Ответы [ 3 ]

5 голосов
/ 05 апреля 2009

Вы звоните free () без вызова malloc (). Ищите неинициализированные указатели. Если вы используете отладчик (gdb), вы можете набрать «bt» для «backtrace», и это покажет вам стек во время возникновения ошибки.

3 голосов
/ 05 апреля 2009

в GDB попробуйте

bt

для получения дополнительной информации о том, когда произошла ошибка. Попытка освободить нераспределенную память является распространенной ошибкой, и gdb + xcode предоставляет множество инструментов, которые помогут вам выяснить, где проблема.

2 голосов
/ 06 апреля 2009

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

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

  1. Установить MallocStackLogging, MallocStackLoggingNoCompact окружений равными 1.
  2. Запустите программу и, как только она выведет строку, используйте malloc_history из оболочки, чтобы узнать трассировку стека выделения: malloc_history <pid> <addr>.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...