Mi sono permesso di sostituire il while(1) con:
foo();
foo();
foo();
giusto per non crearmi un DoS da solo.
Ottengo:
codice:
$ mtrace leak data.txt
Memory not freed:
-----------------
Address Size Caller
0x08a95378 0x800 at /home/demo/leak.c:6
0x08a95b80 0x800 at /home/demo/leak.c:6
0x08a96388 0x800 at /home/demo/leak.c:6
La riga 6 è questa:
string = (char*)malloc(2048);
Idem con valgrind:
codice:
$ valgrind --leak-check=yes ./leak
==8621== Memcheck, a memory error detector
==8621== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==8621== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==8621== Command: ./leak
==8621==
==8621==
==8621== HEAP SUMMARY:
==8621== in use at exit: 6,656 bytes in 4 blocks
==8621== total heap usage: 5 allocs, 1 frees, 7,008 bytes allocated
==8621==
==8621== 2,048 bytes in 1 blocks are definitely lost in loss record 2 of 4
==8621== at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==8621== by 0x8048455: foo (leak.c:6)
==8621== by 0x804847C: main (leak.c:15)
==8621==
==8621== 2,048 bytes in 1 blocks are definitely lost in loss record 3 of 4
==8621== at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==8621== by 0x8048455: foo (leak.c:6)
==8621== by 0x8048481: main (leak.c:16)
==8621==
==8621== 2,048 bytes in 1 blocks are definitely lost in loss record 4 of 4
==8621== at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==8621== by 0x8048455: foo (leak.c:6)
==8621== by 0x8048486: main (leak.c:17)
<cut>