有篇文章如是说:

用MFC开发的应用程序,在DEBUG版模式下编译后,都会自动加入内存泄漏的检测代码。在程序结束后,如果发生了内存泄漏,在Debug窗口中会显示出所有发生泄漏的内存块的信息,以下两行显示了一块被泄漏的内存块的信息:
E:\TestMemLeak\TestDlg.cpp(70) : {59} normal block at 0x00881710, 200 bytes long.
Data: <abcdefghijklmnop> 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70”
我在debug模式下,就分配了一块内存空间,怎么没有提示类似的信息?

解决方案 »

  1.   

    void CTestView::OnDraw(CDC* pDC)
    {
    CTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here int nSize=80;
    char*  p= new char[nSize];}
    对吧?我是在debug模式下的。
      

  2.   

    是的,DEBUG窗口可以显示内存泄漏信息,或者使用CMemoryState类来检测内存是否泄漏
      

  3.   

    BoundsChecker用起来太烦了.不知道有没有更好的?
    还有Debug下的内存泄露很难看懂,有什么规律吗?我的程序里面老是报CString类里造成的内存泄露,是怎么回事儿?
      

  4.   

    肯定有的 我试过了 
    Dumping objects ->
    e:\test\test33\test33\test33dlg.cpp(153) : {76} normal block at 0x00B85EC8, 4 bytes long.
     Data: <    > CD CD CD CD 
    Object dump complete.
    The program '[2120] test33.exe: Native' has exited with code 0 (0x0).你把代码帖出来看看
      

  5.   

    可以让你的程序运行, 同时打开Windows任务管理器, 切换到进程, 看内存的使用情况:如:
    void CTestView::OnDraw(CDC* /*pDC*/)
    {
    CTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here         //Memory leak
    CDC* pDC=GetDC();
    }
    你移动或调整该应用程序的大小, 就可以看到它的内存使用量不断扩大.
      

  6.   

    TestDlg.cpp文件的第70行分配的对象没有释放
    char*  p= new char[nSize];要释放的
      

  7.   

    那我的vc为什么没有啊?
    我的project -》setting 是 win32 debug 的。请问这个内存泄露的输出是在 output里面的debug标签里面吧?
      

  8.   

    不会的,只要是堆里面分配的,没有回收,就要leak
      

  9.   

    void CTestView::OnDraw(CDC* pDC)
    {
    CTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here int nSize=80;
    char*  p= new char[nSize];
             TRACE("看看这里是不是被调用过\n");}
      

  10.   

    你要不会用TRACE就用设断点。
      

  11.   

    肯定被调用过啊,我用breakpoint试过了的。
    我的版本的是vs6+sp6,这个会不会有影响哦?