本文主要是介绍实例介绍利用valgrind定位内存异常释放问题(double free 和wrong free),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前介绍过利用valgrind来定位内存泄漏(慢性病, 会导致程序在某个不确定的时刻异常), 本文我们来简要介绍利用valgrind来定位内存的重复释放(急性病, 会报纸程序崩溃)。 看程序:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>int main()
{char *p = (char *)malloc(30);free(p);free(p);return 0;
}
我们用valgrind来检测一下:
[root@xxx ~/valgrind-3.8.1/bin]# g++ -g test.cpp
[root@xxx ~/valgrind-3.8.1/bin]#
[root@xxx ~/valgrind-3.8.1/bin]# ./valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./a.out
==18229== Memcheck, a memory error detector
==18229== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==18229== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==18229== Command: ./a.out
==18229==
==18229== Invalid free() / delete / delete[] / realloc()
==18229== at 0x4C27300: free (vg_replace_malloc.c:446)
==18229== by 0x400611: main (test.cpp:9)
==18229== Address 0x5d84040 is 0 bytes inside a block of size 30 free'd
==18229== at 0x4C27300: free (vg_replace_malloc.c:446)
==18229== by 0x400605: main (test.cpp:8)
==18229==
==18229==
==18229== HEAP SUMMARY:
==18229== in use at exit: 0 bytes in 0 blocks
==18229== total heap usage: 1 allocs, 2 frees, 30 bytes allocated
==18229==
==18229== All heap blocks were freed
这篇关于实例介绍利用valgrind定位内存异常释放问题(double free 和wrong free)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!