VS2010报内存泄露错误的解决办法

执行程序时报如下错误,提示内存泄露,并且泄露的内存块均位于333。
Detected memory leaks!
Dumping objects ->
{98500} normal block at 0x003CC2B8, 968 bytes long.
 Data: <     p       p  > E8 0B 19 00 00 70 19 00 00 90 19 00 00 70 19 00 
Object dump complete.
解决办法:

1. 在程序开始启动的地方(足够前的地方,只要在泄漏的内存分配的前面)使用代码:

_CrtSetBreakAlloc(98500); //98500为上面内存泄漏的块号.

2. 然后debug运行,程序自动断点在"内存块98500"分配的位置:

 

/* break into debugger at specific memory allocation */
if (_crtBreakAlloc != -1L && lRequest == _crtBreakAlloc)
_CrtDbgBreak();

3 .我们已经找到了泄漏的那块内存分配的底层操作的地方了(好拗口!).

这个时候我们利用 "调试" –> "跳出" ,快捷键为:"Shift + F11" .

跳出当前函数..然后一直往跳出,边跳边查看调用栈.直到看到了自己写的代码,例如我的

std::ifstream* origStream = new std::ifstream();
 

4 .这个时候我已经可以判断 origStream 分配了内存,但是没有合理释放.处理后再次运行就没有出现内存泄漏了.

5.最后,记得把_CrtSetBreakAlloc(98500); 这句话删除掉,不然每次都断点,岂不是烦死..

 

猜你喜欢

转载自blog.csdn.net/qq_36570733/article/details/79279031
今日推荐