我创建了若干子线程,在退出应用时,系统提示
Detected memory leaks!
Dumping objects ->
v2\ServiceThread.cpp(30) : {7742} client block at 0x5DE68AB8, subtype 0, 4264 bytes long.
a CServiceThread object at $5DE68AB8, 4264 bytes long 
这是什么意思,我点击查看内存泄漏地方,系统回到
IMPLEMENT_DYNCREATE(CServiceThread, CWinThread) 一行.
我得问题是这里的泄漏问题出在什么地方?怎么调试

解决方案 »

  1.   

    因为你用的是MFC的线程,MFC的线程除了系统的线程资源外,还有一个对应的CWinThread派身类对象,这个对象是AfxBeginThread时在heap上分配的,CWinThread有一个成员变量m_bAutoDelete控制它是否自动销毁,默认为TRUE,这样线程结束时就会delete this。但即使这样,你还是要保证子线程在程序结束之前结束,偶一般的做法是:在ExitInstance中SetEvent,子线程WaitForSingleObject收到该信号后主动退出,主线程也通过WaitForSingleObject检测到子线程,确认它已经退出后才从ExitInstance中返回。
      

  2.   

    谢谢楼上的.
    还有一个问题
    就是如果资源泄漏处在系统文件定义的函数中怎么办?我调试时总是说在strcore.cpp有问题
    我打开一看原来是关于CString的内存没有释放.我该怎么办
      

  3.   

    就是你的线程函数没有正常返回,可以在线程函数里,用WaitForSingleObject等待一个事件的通知,在进程结束前先激发该事件,线程函数得到该通知就用return 0返回就行了.