ps -aux
Это для определения какое приложение ест память
В Linux существует утилита valgrind. Чтобы установить valgrind, необходимо в консоли прописать
sudo apt install valgrin
Пример программы которая заполняет динамический массив, но при этом, не очищается память
main.c#include <stdlib.h>
#include <stdio.h>
#define N 10
int main()
{
int * mas = (int *)malloc(N * sizeof(int));
for(int i = 0; i < N; i++)
{
*(mas+i) = i;
printf("%d\t", *(mas+i));
}
printf("\n");
return 0;
}
Скомпилировав программу с помощью CLang, мы получаем .out файл, который мы подкидываем valgrind'у.
С помощью команды
valgrind ./a.out
Как работает valgrind, думаю, есть смысл погуглить, а сейчас опишу, как выполнится программа, valgrind выведет это:
==2342== HEAP SUMMARY:
==2342== in use at exit: 40 bytes in 1 blocks
==2342== total heap usage: 2 allocs, 1 frees, 1,064 bytes allocated
==2342==
==2342== Searching for pointers to 1 not-freed blocks
==2342== Checked 68,984 bytes
==2342==
==2342== LEAK SUMMARY:
==2342== definitely lost: 40 bytes in 1 blocks
==2342== indirectly lost: 0 bytes in 0 blocks
==2342== possibly lost: 0 bytes in 0 blocks
==2342== still reachable: 0 bytes in 0 blocks
==2342== suppressed: 0 bytes in 0 blocks
==2342== Rerun with --leak-check=full to see details of leaked memory
==2342==
==2342== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
==2342== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Таким образом, valgrind пока показывает, сколько памяти было потеряно. Чтобы увидеть, где была выделена память, необходимо прописать --leak-check=full, и тогда, valgrind, помимо выше описанного, выведет это:
==2348== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==2348== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2348== by 0x40053A: main (in /home/hunterlan/Habr/a.out)
Конечно, тут не указана строка, однако уже указана функция, что не может не радовать.
Есть альтернативы valgrind’у, такие как strace или Dr.Memory, но я ими не пользовался, да и они применяется в основном там, где valgrind бессилен.
Удачи в отлове утечки.