内存泄漏是什么?
某指针的内存空间未被分配或已被释放,程序访问了此地址会导致内存泄漏,表现在程序异常退出。
如何定位
开发时,使用日志,至少能保证定位到大概的问题,这种一般被称为问题可定位手段,包括日志打印、统计计数;
使用gdb方式;
编译开启asan选项,出现内存异常可以打印详细的内存栈;
尽量避免不规范的编程习惯,通过代码检视限制;
每个迭代都需要实现对应的测试用例,保证门禁的CI/CD对这个迭代的监控
fuzz测试,设置程序/进程的主入口,进行fuzz测试能够发现程序中可能出现的内存泄漏、安全等问题。
编程规范
使用指针时首先判空,至少函数调用栈中,入口函数已经进行了判空操作;
函数入参为指针场景,必须规定入参为数组指针;
对IO操作函数检视进行严格限制,或者对IO操作函数实现自己的函数,增加对地址空间的检查后再进行空间分配或者释放;