1、////BC说以下这些打了注释号的地方发生了内存泄露?!嘎嘎,单步跟踪也不知道是我程序什么地方调用了这些个东西,谁能告诉我怎么办哪?if (!(__sbh_pHeaderList = HeapAlloc(_crtheap, 0, 16 * sizeof(HEADER))))  ////泄露!if ( (*env = (_TSCHAR *)_malloc_crt(cchars * sizeof(_TSCHAR)))== NULL )  ////泄露!p = _malloc_crt(numargs * sizeof(_TSCHAR *) + numchars * sizeof(_TSCHAR)); ////泄露!if ( (_tenviron = env = (_TSCHAR **)
    _malloc_crt((numstrings+1) * sizeof(_TSCHAR *))) == NULL )  ////泄露!if ( (p = (_PVFV *) _realloc_crt(__onexitbegin,
                _msize_crt(__onexitbegin) +
                ONEXITTBLINCR * sizeof(_PVFV))) == NULL )    ////泄露!
2、以下地方出现资源泄露??嘎嘎if ((hFont = CreateFont(GetSystemMetrics(SM_CYMENUCHECK), 0, 0, 0,FW_NORMAL, 0, 0, 0, SYMBOL_CHARSET, 0, 0, 0, 0, _T("Marlett"))) != NULL)   ////资源泄露!InitializeCriticalSection( &(pio->lock) );  ////资源泄露!if ((hMenu = ::LoadMenu(hInst, lpszMenuName)) == NULL)   ////资源泄露!hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,pParentWnd->GetSafeHwnd(), AfxDlgProc);  ////资源泄露!怎么定位到自己的程序中呢??用BC的CALL STACK出现访问某个DLL时权限不够的功能限制。

解决方案 »

  1.   

    第一个方面的问题:这些好象是调用系统分配内存函数后没有清空而出现的。你查一查所以你new,malloc函数分配的内存是否正确解放。
    第二个方面的,资源泄露还没遇到过,学习了。
      

  2.   

    呀呀,我自己没有任何new,和malloc地说......
      

  3.   

    用BC的时候,不要去管第三方DLL和系统DLL的资源泄漏,只要注意自己的代码。
      

  4.   

    这样子也行么.
    问题是,俺的程序运行三天三夜以后就能从资源管理器看出来内存增加了十几兆.
    我怀疑这其中有可能有上述原因.还有可能是不是因为对数据库的操作,我在运行期间,不停的往数据库 Insert 数据,如果我停止这个操作,就能看到内存唰的一下降下来了。数据库操作也就是通过 ADO 来 Execute sql的insert语句罢了。是不是这种数据库操作可以造成泄漏呢??嘎嘎
      

  5.   

    奇怪也哉,数据库就是用了 _ConnectionPtr 和 _RecordsetPtr两个智能指针而已。
    开始检测以后,只就创建了 Connection 和 Recordset句柄,在此后,recordset根本没打开,也不进行操作。connection 也就是往数据表内插入数据罢了。
    怎么会增加句柄和资源呢?
      

  6.   

    if ((hFont = CreateFont(GetSystemMetrics(SM_CYMENUCHECK), 0, 0, 0,FW_NORMAL, 0, 0, 0, SYMBOL_CHARSET, 0, 0, 0, 0, _T("Marlett"))) != NULL)   ////资源泄露!
    create出来的delete 了没有?这个是big gdi对象,如果不delete会很占内存loadmenu,CreateDialogIndirect等等你都要看看是否有对应的释放函数,我现在在网吧
      

  7.   

    迷惑迷惑,GDI对象都是已经释放了的
      

  8.   

    来来来,又试验了几天,情况一样,这回仔细又观察了,发现刚刚停止的话,内存并没有立即降下来,把程序最小化过一会后,再激活就能看出降下来了。
    嘎嘎,难道是界面绘制和刷新时候出问题。
    可是....凡是自己做的GDI操作,能释放的都释放了的。
      

  9.   

    1、用了HeapAlloc而没有用HeapFree
    用了malloc而没有用free
    当然会出现内存泄露。
    2、
    调用InitializeCriticalSection应使用DeleteCriticalSection释放
    CreateFont和LoadMenu在Win32下应该不会有问题
    CreateDialogIndirect中的lpDialogTemplate是一个Global内存对象,使用完毕后应用GlobalFree释放。