以前一直写在MSN Space上,可惜太慢了,转到这里混吧:)
C++内存泄漏太常见了,开点常见小药方备案,由简单到复杂,分为8类:
1.用Debug版本编译,退出时自动提示哪个文件哪一行泄漏。注意:使用此方法不能使用TerminateProcess。
2.有时,第一种方法不能提供文件名和行号,而只能提供块号,此时可用_CrtSetBreakAlloc()在分配该块时下断点。注意:此方法要求每次泄漏的块号基本一致。
3.利用_CrtMemXXX系列函数 + 二分法 逐步定位错误。可参考_CrtMemCheckpoint(),_CrtMemDifference(),_CrtMemDumpStatistics()等函数。
4.使用第三方工具BoundsChecker。注意:VC7编译的库要求7.0以上版本。
5.使用第三方工具ApplicationVerifier。
6.如果模块化程度高,可逐个排除各模块,从而确定错误所在。
7.熟悉代码的情况下,可先猜测出错区域,放大错误(比如调用一次的变成调用百次等),进而明确错误所在。
8.一般来说新代码出错的可能性较大,因此出现内存泄漏时,应先利用上述方法检查新代码。