你new的资源没有释放 查一下。

解决方案 »

  1.   

    也可再檢查一下CDC::SelectObject()選進去的Object是否被選出來,如果不選出來,Create 的Object所擁有的資源也不會被失放,造成內存leak
      

  2.   

    谢谢各位,我检查了new和delete,可以排除new \delete的问题,程序中也没有cdc,为什么有两个thread?
      

  3.   

    这的确是new和delete引起的原因。要仔细查一下。以前我也发生过。
      

  4.   

    估计是你有一个线程退出时,没有正常退出(用return返回)
      

  5.   

    在线程中内存泄漏主要是使用了ExitThread()或KillThread()语句,替换他们使用return;
      

  6.   

    pData = (CStringData*)
       new BYTE[sizeof(CStringData)+(nLen+1)*sizeof(TCHAR)];//Line 118(strcore.cpp) 
      pData->nAllocLength = nLen;
    經查源代碼如上,是CString類中所申請的內在未釋放.憑空推斷,你可能調用了CString的GetBuffer()而未調用ReleaseBuffer()或者因某種原因CString對象的析構函數未執而程序中止.最好把你使用CString對象的地方好好檢查一下或貼出來我們再看看
      

  7.   

    再一次谢谢各位的大力帮助,我跟踪了一下午,终于找到了,是这样的,元元说的对,申请CString变量时,在CString类中用上述代码给CStirng申请内存,但这种情况下,在程序退出时,系统自带释放该CString申请的内存。我的问题是主线程中,AfxBeginThread一个子线程,在该子线程中我申明了两个CString变量,我的主程序退出了,它强迫子线程退出,而子线程还未来的及return 0,所有系统无法自动释放CString类内部new的内存,还有一个CWinThread对象也为delete(子线程),所以出现了内存泄漏。
    我的另一个问题是:用什么办法在主线程中监视所有子线程已经全部返回后主线程再退出呢?
      

  8.   

    每当调用hThread = CreateThread();函数创建一个线程时,线程的状态是未通知,当线程退出时线程的状态变为通知态,可以用WaitForSignleObject(hThread,...);监测线程退出。