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

鍵盤的詠嘆調

常用鏈接

統計

最新評論

【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>
            午夜精品一区二区三区四区| 国产精品免费一区二区三区在线观看 | 欧美日本高清视频| 国产三区精品| 亚洲一区一卡| 亚洲黄色在线| 久久狠狠亚洲综合| 欧美日韩精品一区二区三区四区| 亚洲国产黄色| 久久性色av| 欧美日韩一级黄| 国产欧美日韩综合一区在线播放| 亚洲精品国产无天堂网2021| 久久久精品日韩| 亚洲一区免费在线观看| 欧美精品一区二区视频| 亚洲国产日韩欧美| 免费日韩av电影| 久久久精品一区二区三区| 国产日韩欧美三级| 久久国产精品亚洲va麻豆| 亚洲一区二区三区乱码aⅴ| 欧美日韩一区成人| 在线观看不卡av| 麻豆成人综合网| 狂野欧美一区| 国内精品视频一区| 久久综合久久综合这里只有精品 | 国产亚洲精品综合一区91| 亚洲在线视频网站| 欧美成人一区二区三区| 麻豆精品一区二区综合av | 亚洲图片欧美一区| 国产精品观看| 欧美在线视频日韩| 欧美一区二区三区免费视| 国产网站欧美日韩免费精品在线观看| 小嫩嫩精品导航| 亚洲欧洲精品一区二区三区不卡| 欧美精品在线一区二区| 亚洲欧美激情视频在线观看一区二区三区| 久久久噜噜噜久久久| 久久综合久久综合九色| 夜夜嗨av一区二区三区中文字幕 | 欧美日韩一区二区三| 欧美一区二区三区在线视频 | 性久久久久久久久| 亚洲激情社区| 欧美~级网站不卡| 国产欧美日本一区视频| 日韩午夜免费| 亚洲精选成人| 久久综合九色综合网站| 久久三级视频| 国产一区二区三区四区| 亚洲天堂网在线观看| 一区二区三区精品久久久| 免费高清在线一区| 农村妇女精品| 伊人久久久大香线蕉综合直播| 亚洲综合日韩中文字幕v在线| 亚洲国产精品ⅴa在线观看 | 久久久久久一区二区| 久久精品一区四区| 国产视频在线观看一区| 亚洲影院在线| 欧美尤物一区| 国产婷婷一区二区| 欧美与黑人午夜性猛交久久久| 欧美一级久久| 国产女人18毛片水18精品| 亚洲先锋成人| 欧美专区亚洲专区| 国产一区二区精品久久| 久久gogo国模裸体人体| 麻豆freexxxx性91精品| 91久久国产综合久久91精品网站| 久久亚洲影音av资源网| 亚洲成在线观看| 99成人在线| 国产精品多人| 欧美在线观看一二区| 欧美成人有码| 亚洲视频一二区| 国产欧美 在线欧美| 久久精品国产99精品国产亚洲性色 | 国产精品久久久久7777婷婷| 亚洲天堂黄色| 久久久久天天天天| 亚洲精品欧美专区| 国产精品扒开腿爽爽爽视频| 午夜精品久久久久99热蜜桃导演| 久久久久久久综合| 亚洲精品视频免费观看| 欧美亚男人的天堂| 久久国产高清| 一区二区精品| 欧美本精品男人aⅴ天堂| 野花国产精品入口| 国产在线麻豆精品观看| 欧美精品二区| 欧美一区二区在线免费播放| 亚洲国产99| 欧美在线播放一区| 亚洲免费av片| 国产亚洲免费的视频看| 欧美激情视频一区二区三区不卡| 亚洲欧美日韩一区二区三区在线| 欧美激情区在线播放| 欧美在线视频全部完| 9l国产精品久久久久麻豆| 国产亚洲精品一区二区| 欧美日韩国产999| 久久久国产精品一区二区三区| 99国产成+人+综合+亚洲欧美| 久久人人97超碰精品888 | 黄色成人在线网址| 国产精品高清在线| 欧美成人午夜剧场免费观看| 午夜一区不卡| 亚洲午夜女主播在线直播| 亚洲电影有码| 狼人天天伊人久久| 久久精品免费播放| 亚洲欧美久久久久一区二区三区| 影音先锋一区| 国产亚洲一区二区三区在线播放| 欧美体内she精视频在线观看| 久久久久久穴| 久久免费黄色| 国产精品www| 欧美国产一区在线| 久久精品国产99国产精品澳门| 在线视频中文亚洲| 最新国产の精品合集bt伙计| 欧美一区二区三区视频在线观看 | 韩国自拍一区| 国产精品免费在线 | 玖玖视频精品| 久久精品国产69国产精品亚洲| 午夜精品久久久久久久久久久久| 这里只有精品丝袜| 亚洲午夜av电影| 亚洲一区二区三区成人在线视频精品| 日韩一级欧洲| 99精品久久久| 亚洲一区二区三区国产| 亚洲一区999| 亚洲专区在线视频| 亚洲制服少妇| 午夜视频一区二区| 久久国产福利国产秒拍| 久久视频国产精品免费视频在线 | 一区二区av| 亚洲无亚洲人成网站77777| 亚洲女爱视频在线| 欧美在线观看一二区| 久久蜜桃精品| 女同性一区二区三区人了人一| 欧美国产先锋| 欧美午夜宅男影院| 国产毛片精品国产一区二区三区| 国产偷国产偷精品高清尤物| 在线成人免费观看| 99这里有精品| 欧美一级淫片aaaaaaa视频| 久久久99精品免费观看不卡| 欧美成人自拍视频| 亚洲精品免费观看| 亚洲欧美日本伦理| 另类天堂视频在线观看| 欧美日本韩国一区| 国产日韩三区| 亚洲免费观看高清在线观看| 亚洲男女自偷自拍| 久久亚洲精品一区二区| 亚洲激精日韩激精欧美精品| 在线亚洲免费视频| 久久免费黄色| 国产精品久久久久久av下载红粉| 国产一区二区福利| 一本色道88久久加勒比精品 | 久久精品国产一区二区三| 免费人成网站在线观看欧美高清| 亚洲人体大胆视频| 欧美在线日韩| 欧美日韩国产影片| 黄色一区二区三区| 亚洲伊人第一页| 亚洲电影一级黄| 欧美与黑人午夜性猛交久久久| 欧美精品日韩精品| 黄色日韩在线| 香蕉久久a毛片| 亚洲精品乱码| 久久躁日日躁aaaaxxxx| 国产精品久久久久久av下载红粉| 亚洲激情国产| 麻豆精品视频在线| 亚洲男人影院|