valgrind下面包含多个工具:
memcheck
可以检查:1、使用未初始化内存
2、使用已释放内存
3、访问内存越界
4、申请空间是否释放
5、申请释放内存的匹配
6、memcpy的源和目的是同一个指针
callgrind
收集运行数据,函数调用关系等信息
cachegrind
模拟cpu缓存,检查cache丢失和命中。以及每行代码,每个函数,每个模块,整个程序产生的指令数
helgrind
检查多线程竞争问题
massif
检查程序堆栈使用了多少内存
///
常用命令
检查./app的内存,给出详细泄露信息,,检查子线程,以xml格式输出,输出到log.xml中
memcheck
可以检查:1、使用未初始化内存
2、使用已释放内存
3、访问内存越界
4、申请空间是否释放
5、申请释放内存的匹配
6、memcpy的源和目的是同一个指针
callgrind
收集运行数据,函数调用关系等信息
cachegrind
模拟cpu缓存,检查cache丢失和命中。以及每行代码,每个函数,每个模块,整个程序产生的指令数
helgrind
检查多线程竞争问题
massif
检查程序堆栈使用了多少内存
///
常用命令
检查./app的内存,给出详细泄露信息,,检查子线程,以xml格式输出,输出到log.xml中
valgrind --tool=memcheck --leak-check=full --show-reachable=no --trace-children=yes --xml=yes --log-file='log.xml' ./app
如果全局指针指向一块内存,在程序结束时没把指针设成NULL,却用--show-reachable=yes的话,就会报告memory still reachable。