Как следует из сообщения об ошибке, вы определяете функцию в месте, которое вы не должны - в данном случае внутри функции main
. Уберите его оттуда, и с вами все будет в порядке.
Если программа просачивается в течение длительного времени, top может оказаться непрактичным. Я написал бы простые сценарии оболочки, которые добавляют результат «ps aux» в файл каждые X секунд, в зависимости от того, сколько времени требуется для утечки значительных объемов памяти. Что-то вроде:
while true
do
echo "---------------------------------" >> /tmp/mem_usage
date >> /tmp/mem_usage
ps aux >> /tmp/mem_usage
sleep 60
done
В дополнение к вершине можно использовать Системный монитор (Система - администрация - Системный монитор, затем избранная вкладка Processes). Выберите Представление - Все Процессы, перейдите к Редактированию - Предпочтения и включите столбец Virtual Memory. Вид или этим столбцом, или столбцом
MemoryСложное задание. Обычно я бы предложил взять отладчик / профилировщик памяти, например, Valgrind , и запускать в нем программы одну за другой. Рано или поздно вы обнаружите утечку программы и сможете сообщить об этом разработчику или исправить ее самостоятельно.
Я предлагаю использование htop как лучшая альтернатива вершине.
Как и предполагалось, путь - это Вальгринд. Это профилировщик, который проверяет многие аспекты производительности вашего приложения, включая использование памяти.
Запуск вашего приложения через Valgrind позволит вам проверить, забыли ли вы освободить память, выделенную для malloc, дважды ли вы освободили одну и ту же память и т. Д.
Если Вы не можете сделать этого дедуктивно, рассмотрите шаблон отладки Вспышки Сигнала: Увеличьте объем памяти, выделенный одним процессом фактором десять. Тогда запустите свою программу.
, Если сумма пропущенной памяти является тем же, тот процесс не был источником утечки; восстановите процесс и сделайте ту же модификацию к следующему процессу.
при ударе процесса, который ответственен, Вы будете видеть размер своего перехода утечки памяти ("вспышка сигнала"). Можно сузить его еще далее путем выборочного увеличения размера выделения отдельных операторов в рамках этого процесса.
Можно работать top
команда (для выполнения нев интерактивном режиме, тип top -b -n 1
). Для наблюдения приложений, которые пропускают память посмотрите на следующие столбцы: