Лучший способ найти утечки памяти в программе на C - PullRequest
4 голосов
/ 18 мая 2011

Я пытаюсь выполнить задание колледжа, и критерии оценки указывают 5% на управление памятью - особенно на отсутствие утечек памяти.

Насколько я понимаю, утечки памяти в простых программах на C вызваны только указателями, которые были отменены программой - то есть вызовами malloc / calloc / etc, которые никогда не имеют соответствующих free.

Мой вопрос состоит из 3 частей:

  1. Какой самый простой способ для Solaris и OSX «доказать», что у вас нет утечки памяти?
  2. Есть ли в XCode какие-либо инструменты для определения утечек памяти?
  3. Освобождает ли операционная система всю ранее выделенную память в программе переменного тока после завершения процесса?

Ответы [ 4 ]

5 голосов
/ 18 мая 2011

Valgrind твой друг.

3 голосов
/ 18 мая 2011
  1. Для каждого malloc () вам нужно убедиться, что у вас есть ровно один free ().
  2. Я не работал с XCode, но эта запись в форуме может помочь.
  3. Да. Однако все еще плохая форма, чтобы позволить вашей запущенной программе «просочиться».

В целом, это хорошая идея, чтобы научиться избегать утечек без использования таких инструментов, как отладчик памяти (в начале) - особенно для ваших простых программ. Однако это больно: когда дело доходит до создания чего-то нетривиального, вы захотите начать изучать, как использовать более продвинутые инструменты отладки (например, Valgrind , как предложил Алекс Рейнольдс в другом ответе).

1 голос
/ 08 июля 2019

Ответ для Mac OS и пример, которого следует избегать (сэкономил вам полчаса).


Mac OS не поставляется с Valgrind или dmalloc.Кроме того, у Valgrind есть некоторые проблемы с совместимостью при попытке установить его в Sierra.

Существует утилита под названием «утечки», которую я запускаю следующим образом:

leaks -atExit --/Contents/Developer/usr/lib/libLeaksAtExit.dylib ./a.out

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

Если у вас есть время, то может прочитать и использовать Использование OSX Leaks для программ на C в командной строке?

Ресурсы:

  1. Обнаружение утечек памяти
  2. Использование команды "утечки" в исполняемом файле C / C ++

PS: Может быть, если использовать с «iprofiler», то это может быть полезно, но у меня его не было установлено.

0 голосов
/ 18 мая 2011

есть dmalloc тоже

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