个人环境是: XP SP2 . VS2003函数
最近在一个项目中,程序退出后都出现内存泄漏:debug
Detected memory leaks! Dumping objects -> {98500} normal block at 0x05785AD0, 152 bytes long. Data: << N N x 7 > 3C AC 4E 10 00 00 00 00 BC A4 4E 10 78 B6 37 00 Object dump complete.
并且每次退出都是同样的.泄漏的内存块都是98500.调试
解决方法:orm
1. 在程序开始启动的地方(足够前的地方,只要在泄漏的内存分配的前面)使用代码:内存
_CrtSetBreakAlloc(98500); //98500为上面内存泄漏的块号.ci
2. 而后debug运行,程序自动断点在"内存块98500"分配的位置:io
/* break into debugger at specific memory allocation */
if (_crtBreakAlloc != -1L && lRequest == _crtBreakAlloc) _CrtDbgBreak();
3 .咱们已经找到了泄漏的那块内存分配的底层操做的地方了(好拗口!).stream
这个时候咱们利用 "调试" –> "退出" ,快捷键为:"Shift + F11" .object
跳出当前函数..而后一直往"上"跳,边跳边查看调用栈.直到看到了本身写的代码,例如个人内存泄漏
std::ifstream* origStream = new std::ifstream();
4 .这个时候我已经能够判断 origStream 分配了内存,可是没有合理释放.处理后再次运行就没有出现内存泄漏了.
5.最后,记得把_CrtSetBreakAlloc(98500); 这句话删除掉,否则每次都断点,岂不是烦死..