bug之類定義導致的內存泄露

 經過boost的單元測試後,發現程序竟然存在嚴重的內存泄露,總共有60多M。但是經過好多次認真排除還是毫無頭緒。

無意間發現編譯器有一個警告(因爲源代碼量比較多,警告有100多個,所以我編譯時直接就忽略警告了),**no destructor。我於是驚疑起來,定位到文件後,發現我犯了一個比較隱祕的錯誤。
比如我在A.h頭文件中定義了這樣一個函數A。B是實現類。爲了使得編譯依賴最小,我只是聲明瞭B。於是頭文件如下:
//================A.h
class B;
class A
{
    ~A()
    {
      delete B;
    }
    B *impl;
};
//==================
原來這樣會造成A析構時,不能調用B的析構函數,因爲A不知道B的實現類。所以內存泄露由此產生了。嗨,boost真是好東西,下次學學怎麼對內存泄露的位置進行定位。

 

補充:內存泄露

int main()

{

  ULONG_PTR gdiplusToken;
  Gdiplus::GdiplusStartupInput gdiplusStartupInput;
  Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

  ...

  Gdiplus::GdiplusShutdown(gdiplusToken);

}

但是由於銷燬Graphics對象是在main函數體結束時才進行的,由於gaphics被shutdown了,因此導致錯誤。之前沒有在析構函數裏未刪除它,因此導致了4個byte的內存泄露!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章