zoukankan      html  css  js  c++  java
  • 【Visual Studio】简单内存泄漏检测方法 解决 Detected memory leaks! 问题(转)

    原文转自 http://blog.csdn.net/u011430225/article/details/47840647

    我的环境是: XP SP2.VS2003    

    最近在一个项目中, 程序退出后都出现内存泄漏 : 

    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

    而且每次退出都是一样的.泄漏的内存块都是98500.

    解决方法:       

    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); 这句话删除掉, 不然每次都断点, 岂不是烦死..

  • 相关阅读:
    326. Power of Three
    python实现Excel删除特定行、拷贝指定行操作
    283. Move Zeroes
    268. Missing Number
    263. Ugly Number
    258. Add Digits
    257. Binary Tree Paths
    二叉树的创建,递归前序、中序、后序遍历以及队列实现层遍历
    242. Valid Anagram
    237. Delete Node in a Linked List
  • 原文地址:https://www.cnblogs.com/happykoukou/p/7743847.html
Copyright © 2011-2022 走看看