青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

鍵盤的詠嘆調

常用鏈接

統計

最新評論

【zz】使用CRT調試內存分配堆來找出未釋放的內存空間

   原地址:http://blog.csdn.net/Donjuan/archive/2009/02/02/3859154.aspx

   忘記釋放已經分配的內存是一種常見的編程錯誤,當然我指的是在
C++編程當中,例如下面的代碼里面就存在一個忘記釋放內存的編程錯誤。我個人覺得忘記釋放內存的編程錯誤是不可避免的,畢竟程序員都是人,困了,心情不好了,代碼過于復雜啦等等都可能導致忘記加上一句delete XXX語句。

// 未釋放內存空間.cpp : Defines the entry point for the console application.

 

#include "stdafx.h"

#include <windows.h>

#include <string>

#include <iostream>

 

using namespace std;

 

class CTestClass

{

public:

    CTestClass(LPWSTR szName)

    {

        m_lpName = new wstring(szName);

    }

 

    ~CTestClass()

    {

    }

 

    void PrintName()

    {

        wcout << *m_lpName << endl;

    }

 

private:

    wstring *m_lpName;

};

 

HRESULT CreateTestClass(LPWSTR szName, CTestClass **ppObject)

{

    *ppObject = new CTestClass(szName);

    if ( (*ppObject) == NULL )

        return E_FAIL;

    else

        return S_OK;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

    CTestClass *pObject = NULL;

    HRESULT hr = CreateTestClass(L"This is a Test", &pObject);

    if ( hr != S_OK )

    {

        return -1;

    }

    else

    {

        pObject->PrintName();  // pObject沒有被釋放

        return 0;

    }

}

 

實際上Visual Studio已經提供了方法幫助你快速找到這些沒有釋放的內存。

 

Visual Studio提供了一系列的CRT調試APICRT提供了一個調試內存分配堆,可以跟蹤和管理內存在什么地方分配,當你在這個堆上分配內存的時候,每一次內存分配調用例如malloc或者newCRT都會額外分配大約36個字節用來保存例如這個內存塊分配的文件名、行號、內存塊的大小等信息,最后CRT將這些內存塊使用一個雙鏈表鏈接起來。每一次內存釋放的時候,free或者delete函數就從這個內存塊鏈表里面將要釋放的內存塊刪除,因此在需要檢查內存泄漏的時候,只要遍歷這個雙鏈表依次打印出這些內存塊就可以發現所有未釋放的內存了。下面是CRT內存塊的原始聲明:

typedef struct _CrtMemBlockHeader

{

    // Pointer to the block allocated just before this one:

    struct _CrtMemBlockHeader *pBlockHeaderNext;

    // Pointer to the block allocated just after this one:

    struct _CrtMemBlockHeader *pBlockHeaderPrev;

    char *szFileName;    // File name

    int nLine;           // Line number

    size_t nDataSize;    // Size of user block

    int nBlockUse;       // Type of block

    long lRequest;       // Allocation number

    // Buffer just before (lower than) the user's memory:

    unsigned char gap[nNoMansLandSize];

} _CrtMemBlockHeader;

 

下面的代碼演示了如何使用CRT提供的調試API來修改剛才的源文件檢測未釋放的內存空間(注意紅色添加的部分):

// 未釋放內存空間.cpp : Defines the entry point for the console application.

//

 

#include "stdafx.h"

#include <windows.h>

#include <string>

#include <iostream>

// 使用CRT調試API

#include <crtdbg.h>

 

using namespace std;

 

// 將所有的內存分配函數new替換成CRT提供的調試new

#ifdef _DEBUG

#   define DEBUG_CLIENTBLOCK new(_CLIENT_BLOCK, __FILE__, __LINE__)

#else

#   define DEBUG_CLIENTBLOCK

#endif

 

#ifdef _DEBUG

#    define new DEBUG_CLIENTBLOCK

#endif

 

class CTestClass

{

public:

    CTestClass(LPWSTR szName)

    {

        m_lpName = new wstring(szName);

    }

 

    ~CTestClass()

    {

    }

 

    void PrintName()

    {

        wcout << *m_lpName << endl;

    }

 

private:

    wstring *m_lpName;

};

 

HRESULT CreateTestClass(LPWSTR szName, CTestClass **ppObject)

{

    *ppObject = new CTestClass(szName);

    if ( (*ppObject) == NULL )

        return E_FAIL;

    else

        return S_OK;

}

 

int _tmain(int argc, _TCHAR* argv[])

{  

// 設置CRT調試API的報表輸出模式,將所有的錯誤、警告還有斷言都輸出到控制臺

    _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );

    _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );

    _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );

    _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT );

    _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );

    _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT );

 

    CTestClass *pObject = NULL;

    HRESULT hr = CreateTestClass(L"This is a Test", &pObject);

    if ( hr != S_OK )

    {

        return -1;

    }

    else

    {

        pObject->PrintName();

 

// 檢查未釋放的內存

        _CrtDumpMemoryLeaks();

        return 0;

    }

}

posted on 2009-02-03 11:59 鍵盤的詠嘆調 閱讀(434) 評論(0)  編輯 收藏 引用 所屬分類: C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区视频在线看| 一本色道久久| 欧美肥婆在线| 欧美成人免费在线观看| 欧美大色视频| 欧美成人激情在线| 欧美国产日韩xxxxx| 欧美视频一区二区在线观看 | 亚洲国产成人av| 亚洲国产精品久久久久秋霞影院| 伊人影院久久| 亚洲麻豆av| 欧美一区二区三区免费看| 欧美黄色aaaa| 一本久久综合亚洲鲁鲁| 性欧美大战久久久久久久免费观看| 欧美一区二区三区四区在线| 久久综合影视| 国产精品一区二区在线观看不卡| 精品成人在线视频| 在线性视频日韩欧美| 久久经典综合| 亚洲三级观看| 欧美一区二区三区久久精品 | 欧美日韩在线播放| 激情欧美亚洲| 亚洲图色在线| 欧美激情亚洲综合一区| 一区二区三区精品在线| 久久免费少妇高潮久久精品99| 欧美午夜一区二区三区免费大片 | 欧美性猛交xxxx乱大交退制版| 国产日韩一区二区三区在线| 日韩视频久久| 快she精品国产999| 亚洲一区二区视频| 欧美日韩国产欧| 亚洲第一黄网| 久久久久中文| 午夜视频久久久| 国产精品国产精品国产专区不蜜| 亚洲国产精品第一区二区三区| 欧美一区二区三区四区在线| 亚洲精品一区二区三区99| 久久久精品一品道一区| 国产欧美日韩在线视频| 亚洲一区二区三区免费在线观看 | 最新日韩欧美| 久久中文久久字幕| 黄色成人在线免费| 久久久久99精品国产片| 亚洲性人人天天夜夜摸| 欧美亚洲第一页| 在线一区二区三区做爰视频网站| 欧美电影美腿模特1979在线看| 久久成人这里只有精品| 国产亚洲精品福利| 久久在线免费视频| 久久精品一区二区国产| 一区二区三区自拍| 老司机67194精品线观看| 久久久一二三| 亚洲欧洲日本mm| 亚洲精品久久久久久久久久久久| 久久综合图片| 亚洲全黄一级网站| 91久久亚洲| 欧美日精品一区视频| 亚洲欧美区自拍先锋| 久久久久久久高潮| 亚洲国产精品成人一区二区 | 久久久久久伊人| 欧美一区二区三区四区在线观看| 国产精品日韩在线播放| 欧美一级网站| 久久久www成人免费毛片麻豆| 激情久久久久久| 亚洲高清一区二| 欧美日韩成人一区二区| 亚洲欧美成人综合| 久久www成人_看片免费不卡| 在线看片日韩| 日韩天堂在线视频| 国产日韩欧美综合精品| 欧美www视频| 欧美日韩免费视频| 欧美在线精品免播放器视频| 狂野欧美一区| 亚洲欧美色一区| 久久精品成人一区二区三区| 亚洲精品美女在线观看播放| 亚洲免费观看高清完整版在线观看熊 | 久久一区国产| 欧美日韩一区二区在线| 欧美在线观看一区| 欧美成人精品在线视频| 亚洲一区在线免费| 久久亚洲二区| 亚洲欧美日韩系列| 免费高清在线一区| 在线亚洲欧美视频| 久久精视频免费在线久久完整在线看| 亚洲激情综合| 亚洲欧美日韩另类| 亚洲美女黄色片| 久久狠狠婷婷| 亚洲亚洲精品三区日韩精品在线视频 | 国产精品99久久不卡二区| 久久国产精品72免费观看| 一区二区三区鲁丝不卡| 欧美在线国产精品| 亚洲一区二区三区四区五区午夜 | 欧美bbbxxxxx| 久久精品一区四区| 欧美日韩综合| 亚洲国产99精品国自产| 国产在线欧美日韩| 午夜精品久久久久久 | 欧美国产先锋| 国产私拍一区| 午夜精品久久久久久久久久久久久| 一本色道久久综合一区| 久久亚洲国产精品日日av夜夜| 久久aⅴ国产欧美74aaa| 浪潮色综合久久天堂| 久久av一区二区三区漫画| 亚洲一区二区三区四区视频| 久久久久一区二区三区四区| 久久av一区二区三区漫画| 欧美性大战久久久久久久| 亚洲国产美女| 亚洲精品日韩一| 久久免费偷拍视频| 久久亚洲电影| 黄色成人片子| 鲁鲁狠狠狠7777一区二区| 久久久久久九九九九| 国产主播精品| 久久精品亚洲乱码伦伦中文| 久久久久免费观看| 韩国av一区二区三区| 久久天天躁夜夜躁狠狠躁2022 | 久久久久久久波多野高潮日日| 国产精品久久777777毛茸茸| 亚洲午夜三级在线| 欧美一区二区三区在线免费观看| 国产精品第一区| 亚洲欧美日韩高清| 久久亚洲不卡| 亚洲国产免费| 欧美日韩99| 99精品欧美| 午夜精品久久久久影视 | 日韩视频免费观看| 亚洲一区二区四区| 国产亚洲精品久久久久动| 久久国产日本精品| 欧美国产日韩精品| 国产精品99久久久久久人| 国产精品中文字幕欧美| 久久精品电影| 最新国产成人av网站网址麻豆| 一本一本a久久| 国产欧美在线| 欧美成年视频| 亚洲一区二区三| 久久精品国产96久久久香蕉| 在线国产亚洲欧美| 欧美色播在线播放| 久久精品视频在线播放| 亚洲日韩视频| 久久精品首页| 亚洲麻豆视频| 国产夜色精品一区二区av| 欧美精品免费看| 久久精品国产亚洲aⅴ| 亚洲精品一级| 久久一区二区三区国产精品| 中文在线资源观看网站视频免费不卡| 国产亚洲精品一区二区| 欧美精品久久久久久| 性做久久久久久| 99综合视频| 亚洲风情亚aⅴ在线发布| 销魂美女一区二区三区视频在线| 亚洲国产成人一区| 国产在线观看精品一区二区三区| 欧美精品久久久久久久免费观看 | 欧美日韩一级黄| 在线视频精品一区| 欧美日韩亚洲91| 久久亚洲欧美| 亚洲美女色禁图| 久久国产精品亚洲77777| 亚洲日本中文| 亚洲欧美中文日韩v在线观看| 在线观看不卡| 国产精品久久久久久av下载红粉| 久久久久一区| 亚洲综合首页|