Visual C++ >> GUI >> MFC

Memory Leak


在Visual C++開發環境中找出程式Memory Leak的地方是一件相當容易的事情,使用者只要將下面程式加到需要Debug的.c檔案最前端即可

#ifdef _DEBUG
 #define new DEBUG_NEW
#endif

未加入Debug Memory Leak的範常式式(Visual C++ Dialog)

int *ptr=0;

BOOL CTestDlg::OnInitDialog()
{
  CDialog::OnInitDialog();

  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  ASSERT(IDM_ABOUTBOX < 0xF000);
  CMenu* pSysMenu = GetSystemMenu(FALSE);
  if(pSysMenu != NULL){
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if(!strAboutMenu.IsEmpty()){
      pSysMenu->AppendMenu(MF_SEPARATOR);
      pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
  }
  SetIcon(m_hIcon, TRUE);
  SetIcon(m_hIcon, FALSE);

  ptr = new int[1000];
  return TRUE;
}

視窗結束後的Memory Leak訊息

Detected memory leaks!
Dumping objects ->
{127} normal block at 0x00399900, 4000 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.

加入Debug Memory Leak的輸出訊息

Detected memory leaks!
Dumping objects ->
TestDlg.cpp(99) : {127} normal block at 0x00399900, 4000 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.

有了這個Debug Memory Leak的機制,使用者只需要使用滑鼠對輸出的錯誤訊息點兩下就可以知道哪一行程式出錯了


返回上一頁