<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      VC++內存泄漏偵測與處理

       

      關于C++內存泄露

      C與C++是開發各種高性能軟件與設備驅動軟件的必然選擇,雖然其它編程語言層出不窮,但C與C++依然處于王者地位。C與C++是最接近匯編語言的高級編程語言,其內存分配與釋放均由用戶代碼自行控制,這樣的機制讓程序員有了更廣的發揮空間,但也產生了深為詬病的內存泄漏問題,也成為很多具有內存自動回收管理機制的編程語言代替C與C++的原因。對于一般小應用程序來說,一點內存泄露不算什么。但是當內存泄漏問題出現在需要7X24小時運行的平臺類程序上的時候,將會使系統可用內存飛速減少,最后耗盡系統資源,導致系統崩潰。

      不管是新手,還是有超過10年編程經驗的老手,在開發過程中發生內存泄露都是不可避免的。所以學會如何防止并檢查內存泄漏,是一個合格的c++程序員必須具備的能力。因為內存泄露在導致系統崩潰前是無任何癥兆的,從大量的代碼中要靠人工找出泄漏,無論對新人還是老手都是一場噩夢。

      微軟的VC開發工具為我們檢查內存泄露提供了很好的功能,本文介紹一種在VC++中檢查內存泄漏的方法,供大家參考。

      偵測內存泄露

      首先在StdAfx.h中添加如下代碼,開啟程序對內存泄露的偵測,注意必須定義宏_CRTDBG_MAP_ALLOC,并包括相關頭文件。

      #define CRTDBG_MAP_ALLOC
      #include <stdlib.h>
      #include <crtdbg.h>

      在程序啟動之時調用 _CrtSetDbgFlag 告知程序在退出時報告泄露的內存。如果是應用程序,在main或WinMain函數中加入如下代碼,如果是動態鏈接庫(DLL)程序,可以在DllMain的DLL_PROCESS_ATTACH執行分支中加入如下代碼。

      _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

      如上處理后,如果程序有內存泄漏,在程序退出時就會在VS的輸出調試窗口中輸出類似下面的內容,這樣就可以判斷出程序存在內存泄漏。

      Detected memory leaks!
      Dumping objects ->
      {1867} normal block at 0x01E18B88, 16 bytes long.
      Data: < o > A8 1C 19 00 00 00 00 00 B0 6F 18 00 CD CD CD CD
      {1866} normal block at 0x01E18B28, 32 bytes long.
      Data: < > 88 8B E1 01 00 00 00 00 00 00 00 00 00 00 00 00
      {1865} normal block at 0x01E18AD8, 16 bytes long.
      Data: < > F0 01 00 00 1E 04 00 00 BA 02 00 00 1F 04 00 00

      定位內存泄露發生的代碼

      在上面的_CrtSetDbgFlag 方法之后加入下面一句代碼,告訴程序在運行到發生內存泄露處的代碼時中斷。其右邊的參數就是上面報告中出現的第一個數字。

      _crtBreakAlloc = 1867;

      發現發生內存泄露的代碼,就可以分析自己的程序,并加入相應的釋放代碼。在內存泄露處理好之后,注釋掉上面一句代碼。經過這樣的處理,就可以把程序中的內存泄露排除得干干凈凈。

      更多資源泄露說明

      上面針對內存泄露的處理只對用 malloc 或 new 分配的內存有效,而用Windows本身的內存API函數是無法偵測到的,所以對于這些內存分配還需進行更仔細的檢查,或改為 malloc 或 new 分配內存。

      在Windows程序中還會用到很多多種類型的資源,如窗口句柄、文件句柄、HDC等,這些用到的資源也需要進行響應的釋放,一旦發生泄露也有可能發生災難性的后果。對這些資源進行類封裝,在C++ class的析構函數中進行釋放操作是非常好的處理方式。

      posted on 2010-07-24 16:15  報表工具研究  閱讀(2178)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 曰韩无码av一区二区免费| 国产在线乱子伦一区二区| 精品国产av无码一区二区三区| 我国产码在线观看av哈哈哈网站| 国产亚洲人成网站在线观看| 熟女少妇精品一区二区| 国产免费午夜福利在线播放 | 久久精品夜色噜噜亚洲av| 亚洲欧美日韩在线不卡| 亚洲日本韩国欧美云霸高清| 国产成人精品国产成人亚洲 | jizz视频在线观看| 欧洲亚洲精品免费二区| 亚洲人成网站77777在线观看| 色又黄又爽18禁免费视频| 好看的国产精品自拍视频| 国产睡熟迷奷系列网站| 亚洲色婷婷久久精品av蜜桃久久| 国产视频一区二区三区麻豆| 国内少妇偷人精品免费| 久章草在线毛片视频播放| 长兴县| 福利一区二区不卡国产| 农村肥熟女一区二区三区| mm1313亚洲国产精品| 精品婷婷色一区二区三区| 四虎在线中文字幕一区| 欧美寡妇xxxx黑人猛交| 亚洲国产精品第一二三区| 日韩精品亚洲专在线电影| 亚洲乳大丰满中文字幕| 亚洲欧美综合人成在线| 欧美人禽zozo动人物杂交| 精品久久精品久久精品久久| 午夜久久一区二区狠狠干| 久久精品亚洲精品国产色婷| 日韩有码中文字幕一区二区| 国产精品亚洲А∨怡红院| 国产福利深夜在线观看| 亚洲日韩性欧美中文字幕| 国产不卡一区二区在线视频|