zoukankan      html  css  js  c++  java
  • 关于new/delete、malloc/free的内存泄漏检测

    情况一 new/delete 内存泄漏

    1、在MFC中可以每一个cpp文件的头部添加以下一段宏来检测new申请而没用free释放的内存泄漏

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef THIS_FILE

    static char THIS_FILE[] = __FILE__;

    #endif

    2、在非MFC项目中使用

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef THIS_FILE

    static char THIS_FILE[] = __FILE__;

    #endif

    需要添加一些设置:

    (1)添加头文件#include <afx.h>

    (2)对着你的项目点击右键,依次选择:属性、配置属性、常规,然后右边有个“项目默认值”,下面有个MFC的使用,选择“在共享 DLL 中使用 MFC”

    缺点:链接了MFC库也使得生成的可执行文件大了许多,这个没什么负面影响。最可怕的是如果仅为了使用内存诊断机制,而带来了链接库冲突的麻烦。

    备注:关于VS2008等VS平台,在项目属性中有一项MFC的使用,有三种设置:

      1.使用标准Windows库(只使用windows的sdk,不使用mfc框架库)

      2.在共享DLL中使用MFC (打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。

      如果程序本来是第二种方式,发给同事,在同事机器上运行时,可能会出现错误:“无法启动程序……,由于应用程序配置不正确,未能启动此应用程序)。

      3.在静态库中使用MFC (将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行)

    情况二 malloc/free 内存泄漏

    1、_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

    添加头文件 #include <crtdbg.h>

    缺点:缺少了文件名和行号。对于一个比较大的程序,没有这些信息,解决问题将变得十分困难。

  • 相关阅读:
    【疑难系列】 是程序卡住了还是怎么了?
    【疑难系列】 一个看起来是数据库死锁的问题
    求求别再这么用log4x了
    如何动态在spring mvc中增加bean
    java中被各种XXUtil/XXUtils辅助类恶心到了,推荐这种命名方法
    少搞点语法糖,多写点功能
    记一次在java中的日期parse错误
    《自控力》读后感·一
    实现数据权限控制的一种方法
    10个必会的 PyCharm 技巧
  • 原文地址:https://www.cnblogs.com/lisuyun/p/5743588.html
Copyright © 2011-2022 走看看