• <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>

            huyutian

            他強由他強,清風拂山崗;他橫由他橫,明月照大江。他自狠來他自惡,我自一口真氣足

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              20 隨筆 :: 47 文章 :: 22 評論 :: 0 Trackbacks
            最近寫一個程序時,出現(xiàn)了內(nèi)存泄漏問題。然后到網(wǎng)上搜索了一下,發(fā)現(xiàn)了一個簡單易用的開源內(nèi)存泄漏檢測工具Visual Leak Detector (VLD) ,在visual c++上工作的很好,其他環(huán)境尚未研究。源代碼、安裝文件可以從codeproject下載,目前最新版本是v1.9b。
            先說說這個工具的使用。安裝完畢,在需要調(diào)試的項目中加入把Visual Leak Detector 的Include目錄和LIB目錄添加到項目的路徑中去。再在需要監(jiān)視的cpp文件頭中加入#include <vld.h>,如果是MFC程序,就可以直接在stdafx.h的最后面加上這一句。剩下的就是運行調(diào)試程序,在output窗口察看結(jié)果了。
            我的錯誤信息如下。
            ---------- Block 251168 at 0x00FE9998: 16 bytes ----------
              Call Stack:
                c:\program files\microsoft visual studio .net 2003\vc7\include\xmemory (34): std::_Allocate<char>
                c:\program files\microsoft visual studio .net 2003\vc7\include\xmemory (137): std::allocator<char>::allocate
                c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (1454): std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Copy
                c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (1485): std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Grow
                c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (612): std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign
                c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (623): std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign
                c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (473): std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator=
                d:\projects\client\quoteclient\tradetransaction.cpp (2143): CTradeTransaction::AnsReadTodayOrder
                d:\projects\client\quoteclient\tradetransaction.cpp (2694): CTradeTransaction::ProcessAllReq
                d:\projects\client\quoteclient\tradesocket.cpp (93): CTradeSocket::ReceivePacket
                d:\projects\client\quoteclient\tradethread.cpp (146): CTradeThread::RunWorkerInternal
                d:\projects\client\quoteclient\tradethread.cpp (97): CTradeThread::WorkerThreadProc
                f:\vs70builds\3077\vc\crtbld\crt\src\threadex.c (241): _threadstartex
                0x7C80B729 (File and line number not available): GetModuleFileNameA
              Data:
                CD CD CD CD    CD CD CD CD    CD CD CD CD    CD CD CD CD     ........ ........
            點擊內(nèi)存泄漏條目可以定位到某一行源代碼,可以看出主要是使用std::string不當造成的內(nèi)存泄漏。
            進一步分析發(fā)現(xiàn)是由于對某個結(jié)構(gòu)體的成員變量std::string誤使用了memset初始化造成的。
            struct tag_myStruct
            {
            std::string id;
            int value;
            }
            總結(jié)一下,在c語言中,結(jié)構(gòu)體的初始化,是可以直接memset(pStruct, 0,  sizeof(tag_myStruct));
            但在c++中必須小心,比如上面的結(jié)構(gòu)實際上就是一個類了,習慣性的用memset就會出錯。為防止這種慣性思維,建議將所有復雜結(jié)構(gòu)直接用class來申明.然后定義缺省構(gòu)造函數(shù)。否則將來使用時一不小心,就可能造成不測。

            補充:盡量不要在C++程序中使用C風格的代碼。但這個是需要一些時間來調(diào)整的。
            posted on 2010-01-26 14:57 胡雨田 閱讀(1111) 評論(0)  編輯 收藏 引用 所屬分類: 編程技巧
            天天做夜夜做久久做狠狠| 国产91久久综合| 亚洲香蕉网久久综合影视| 人妻丰满AV无码久久不卡| 久久99国产综合精品女同| 久久国产成人精品国产成人亚洲| 久久国内免费视频| 国产V综合V亚洲欧美久久| 色婷婷噜噜久久国产精品12p| 欧美午夜精品久久久久免费视| 亚洲国产天堂久久综合网站| 99精品久久精品一区二区| 国产成人综合久久精品尤物| 狠狠色狠狠色综合久久| 国产精品成人99久久久久| 久久久久亚洲精品天堂| 久久久国产99久久国产一| 国产成人精品久久综合 | 亚洲精品美女久久777777| 国产精品免费久久久久电影网| 人妻无码αv中文字幕久久| 亚洲综合久久久| 日韩AV毛片精品久久久| 国产毛片久久久久久国产毛片| av无码久久久久久不卡网站| 亚洲精品白浆高清久久久久久| 一本色综合久久| 欧美久久亚洲精品| 久久精品无码一区二区三区日韩 | 精品久久久久久亚洲精品| 三级三级久久三级久久| 一日本道伊人久久综合影| 亚洲一区精品伊人久久伊人| 欧美日韩精品久久久久| 久久亚洲国产成人精品无码区| 久久久久久亚洲精品无码| 久久97久久97精品免视看| 久久亚洲国产精品123区| 一日本道伊人久久综合影| 午夜精品久久久久久毛片| 欧美丰满熟妇BBB久久久|