我在线程里面定义CString类对象来进行字符操作,但是就会出现STRCORE.CPP文件出现内存泄露的错误,但是删除了这些CString类对象就没有这个错误了,请问为什么不能在自己定义的工作线程里面定义CString类对象???
请高手指教,谢谢!!!

解决方案 »

  1.   

    CString对象作为局部变量,没有问题把
      

  2.   

    注意线程的退出方法, TerminateThread 就不会释放CString动态分配的内存正确的方法应该在线程函数里面 return以下是测试代码BOOL bBreak = FALSE;
    DWORD __stdcall ThreadFun(VOID * p) 
    {
    AA a;
    int b;
    while(1)
    {
    Sleep(1);
    b = a.asd();
    if(bBreak)
    break;
    } return 0; 
    } void CstdDlg::OnBnClickedButton30()
    {
    HANDLE hThread;
    bBreak = FALSE;
    hThread = CreateThread(NULL, 0, ThreadFun, 0, 0, NULL);
    Sleep(100);
    // TerminateThread(hThread, 0);
    bBreak = TRUE;
    }
    如果用的是 TerminateThread 就不会调用类AA的释构函数
    如果 用return 就会调用释构函数, 内存也就释放了
      

  3.   

    那样你的线程也不会正常退出吧,自然内存就得不到释放了.应该在主线程退出时先用WaitForSingleObject等待子线程退出.