- ==2326== Memcheck, a memory error detector
- ==2326== Copyright (C) 2002-2009, and GNU GPL‘d, by Julian Seward et al.
- ==2326== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info
- ==2326== Command: ./a.out
- ==2326==
- /* 这里检测到了动态内存的越界,提示Invalid write。*/
- ==2326== Invalid write of size 2
- ==2326== at 0x80484B4: mem_overrun1 (in /home/fgao/works/test/a.out)
- ==2326== by 0x8048553: main (in /home/fgao/works/test/a.out)
- ==2326== Address 0x40211f0 is 0 bytes inside a block of size 1 alloc‘d
- ==2326== at 0x4005BDC: malloc (vg_replace_malloc.c:195)
- ==2326== by 0x80484AD: mem_overrun1 (in /home/fgao/works/test/a.out)
- ==2326== by 0x8048553: main (in /home/fgao/works/test/a.out)
- ==2326==
/* 这里检测到了double free问题,提示Invalid Free */
- ==2326== Invalid free() / delete / delete[]
- ==2326== at 0x40057F6: free (vg_replace_malloc.c:325)
- ==2326== by 0x8048514: mem_double_free (in /home/fgao/works/test/a.out)
- ==2326== by 0x804855D: main (in /home/fgao/works/test/a.out)
- ==2326== Address 0x4021228 is 0 bytes inside a block of size 1 free‘d
- ==2326== at 0x40057F6: free (vg_replace_malloc.c:325)
- ==2326== by 0x8048509: mem_double_free (in /home/fgao/works/test/a.out)
- ==2326== by 0x804855D: main (in /home/fgao/works/test/a.out)
- ==2326==
- /* 这里检测到了未初始化变量 */
- ==2326== Conditional jump or move depends on uninitialised value(s)
- ==2326== at 0x40057B6: free (vg_replace_malloc.c:325)
- ==2326== by 0x804853C: mem_free_wild_pointer (in /home/fgao/works/test/a.out)
- ==2326== by 0x8048562: main (in /home/fgao/works/test/a.out)
- ==2326==
/* 这里检测到了非法是否野指针 */
- ==2326== Invalid free() / delete / delete[]
- ==2326== at 0x40057F6: free (vg_replace_malloc.c:325)
- ==2326== by 0x804853C: mem_free_wild_pointer (in /home/fgao/works/test/a.out)
- ==2326== by 0x8048562: main (in /home/fgao/works/test/a.out)
- ==2326== Address 0x4021228 is 0 bytes inside a block of size 1 free‘d
- ==2326== at 0x40057F6: free (vg_replace_malloc.c:325)
- ==2326== by 0x8048509: mem_double_free (in /home/fgao/works/test/a.out)
- ==2326== by 0x804855D: main (in /home/fgao/works/test/a.out)
- ==2326==
- ==2326==
- /*
- 这里检测到了文件指针资源的泄露,下面提示说有4个文件描述符在退出时仍是打开的。
- 描述符0,1,2无需关心,通过报告,可以发现程序中自己明确打开的文件描述符没有关闭。
- */
- ==2326== FILE DESCRIPTORS: 4 open at exit.
- ==2326== Open file descriptor 3: test.txt
- ==2326== at 0x68D613: __open_nocancel (in /lib/libc-2.12.so)
- ==2326== by 0x61F8EC: __fopen_internal (in /lib/libc-2.12.so)
- ==2326== by 0x61F94B: fopen@@GLIBC_2.1 (in /lib/libc-2.12.so)
- ==2326== by 0x8048496: mem_leak2 (in /home/fgao/works/test/a.out)
- ==2326== by 0x804854E: main (in /home/fgao/works/test/a.out)
- ==2326==
- ==2326== Open file descriptor 2: /dev/pts/4
- ==2326==
- ==2326==
- ==2326== Open file descriptor 1: /dev/pts/4
- ==2326==
- ==2326==
- ==2326== Open file descriptor 0: /dev/pts/4
- ==2326==
- ==2326==
- ==2326==
- /* 堆信息的总结:一共调用4次alloc,4次free。之所以正好相等,因为上面有一函数少了free,有一个函数多了一个free */
- ==2326== HEAP SUMMARY:
- ==2326== in use at exit: 353 bytes in 2 blocks
- ==2326== total heap usage: 4 allocs, 4 frees, 355 bytes allocated
- ==2326==
- /* 检测到一个字节的内存泄露 */
- ==2326== 1 bytes in 1 blocks are definitely lost in loss record 1 of 2
- ==2326== at 0x4005BDC: malloc (vg_replace_malloc.c:195)
- ==2326== by 0x8048475: mem_leak1 (in /home/fgao/works/test/a.out)
- ==2326== by 0x8048549: main (in /home/fgao/works/test/a.out)
- ==2326==
- /* 内存泄露的总结 */
- ==2326== LEAK SUMMARY:
- ==2326== definitely lost: 1 bytes in 1 blocks
- ==2326== indirectly lost: 0 bytes in 0 blocks
- ==2326== possibly lost: 0 bytes in 0 blocks
- ==2326== still reachable: 352 bytes in 1 blocks
- ==2326== suppressed: 0 bytes in 0 blocks
- ==2326== Reachable blocks (those to which a pointer was found) are not shown.
- ==2326== To see them, rerun with: --leak-check=full --show-reachable=yes
- ==2326==
- ==2326== For counts of detected and suppressed errors, rerun with: -v
- ==2326== Use --track-origins=yes to see where uninitialised values come from
- ==2326== ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 12 from 8)