linux平台
方法一:使用valgrind进行检查。在编译时加入-g选项,并使用如下命令行运行程序:
valgrind --tool=memcheck --leak-check=full ./a.out
如果valgrind工具并没有安装,你需要先安装。
方法二:编译时添加-fsanitize=address选项,这样,程序在运行过程中,如果内存的使用有问题,会有相应的输出提示。
windows平台
1. 启用调试堆内存跟踪,函数:_CrtSetDbgFlag(int newFlag);
2. 显示内存泄漏的报告,函数:_CrtDumpMemoryLeaks();
3. 根据内存分配的次数而中断,函数:_CrtSetBreakAlloc(_In_ long _NewValue);
4. 检测堆栈上每一块内存的完整性,函数:_CrtCheckMemory()
5. VC运行时库还提供了其他调试有关的函数,这些函数大多以_Crt开头。
上面的内存检测方法并不能检查所有的内存错误,应该没有一种工具能做到吧?