1.测试工具
目前使用的是原生valgrind,qt虽然自带valgrind但是报告内容不够全面且不利于生成报告,故暂时没有作为主力。
valgrind的功能多样,可以自行配置参数,定制化生成报告也更有针对性,qt的valgrind是窗口化,相对来说更加直观也更便捷,可以qt-valgrind测试完成后,再用原生valgrind。更加保险,开发效率性价比更高。
2.常见泄露情况
2.1内存没有释放
2.1.1检查new-delete是否配对出现
2.1.2检查malloc-free是否配对出现
2.1.3检查存储结构(顺序或链式)是否被全部释放
- 逻辑检查
- qt的Debug模式下检查
- 打印检查
2.1.4二维结构/多维结构释放
- 检查内层释放逻辑
- 检查内层debug下数据
- 检查是否释放外层
2.2内存没有被管理
- 创建的对象的指针没有被作为返回值返回
- 创建的对象的指针没有作为参数返回(此时参数通常表达为 A* ¶m或A** ¶m,可类推)
2.3内存二次使用
- 类内对象创建前检查
为了避免类内成员出现二次使用问题,应当在构造函数或者创建成员对象函数中增加检查,例如指针不为空才进行创建,否则先要对对象进行销毁,然后在进行创建。
毕竟使用者是可以连续多次调用创建接口。此时最后一次创建之前的所有创建对象的指针都将丢失,形成野指针。
结语:
关于内存初始化也应当找个机会整理一下,避免出现无法稳定复现的bug。
今天是new了一个数组,发现数组内的初值并不是全是0。后来补上了memset就ok了。