最近在開發乙個列印伺服,結果測試時發現程式會不停地洩露記憶體,每秒能洩露1m記憶體,1m 啊兄弟們,我頭疼了,於是到處上網去搜,有的說你的連線未釋放,有的說ado本身有問題,有的說是_bstr_記憶體沒釋放,結果發現是呼叫儲存過程的_commandptr沒有release。
先看**:
try
catch (_com_error &error)
事實上,這塊**我是從網上弄下來的,所以也沒深入研究就用起來了,這是乙個呼叫儲存過程的ado**。問題就出在_commandptr detach,該函式只是將該智慧型指標指向的位址置空,並不釋放其指向位址的記憶體,所以如果程式不停的地呼叫,記憶體會不停的洩露,這就是原因。
此次的**應該為:
m_pcommand.release();
此次解決這一類bug,我覺得還是得用**塊定位的方法,先將你懷疑的**注釋掉,如果記憶體不再洩露了,那問題就出在注釋的那塊**那裡,然後一步一步地縮小包圍圈。
記憶體洩露檢測
c 中檢測記憶體洩漏可以引入系統定義的巨集來檢視,內存在哪個位置洩漏 檔案開始處加入下列定義 define crtdbg map alloc include include 程式退出時加入以下函式 crtdumpmemoryleaks 如果有洩漏會顯示 記憶體洩漏是程式設計中常常見到的乙個問題,我所...
檢測記憶體洩露
程式結束時,作業系統會 程式占用的資源.但是,只要程式還在執行,如果不進行清理,資源最終可能被耗盡.1.vc記憶體洩露檢查工具 visual leak detector 現在已知的最新有2.0版本的,使方法不詳。使用 visual leak detector 2.2.3 在vs工程的linker i...
記憶體洩露檢測
1 包含標頭檔案 include include 2 每個cpp檔案包含 static char this file file define new new normal block,this file,line 3 設定標誌 int tmpdbgflag tmpdbgflag crtsetdbgf...