我有一个线程,在刚开始时在堆上进行了内存分配,在还没有释放这个内存时,我挂起了线程,并且不再启动它;这个时候退出程序是否会出现内存遗漏?如果会内存遗漏,我应该如何释放这块内存,应为分配只在线程中进行?

解决方案 »

  1.   

    会内存遗漏,可用如下方法:
    (1)主线程初始化时:
    HANDLE m_hKillEvent2;
    BOOL bChildThreadExit = FALSE;
    m_hKillEvent2 = CreateEvent(NULL,FALSE,FALSE,NULL);(1)退出程序时,例如
    OnDestroy()
    {

    SetEvent(m_hKillEvent2);
    Sleep(2000);
    CloseHandle(m_hKillEvent2);         While(!bChildThreadExit)
             {
                  Sleep(1000);
              }

    }(2)YourThread.Resume();
    (3)
    UINT YourThread(LPVOID lpParam)
    {
    CMainFrame *pMainFrm=(CMainFrame *)lpParam;
    while(1)
    {
    if( WaitForSingleObject(pMainFrm->m_hKillEvent2, 2000) 
    == WAIT_OBJECT_0 ) 
                        {
                               //...do job to release your heap mem
                               pMainFrm->m_bChildThreadExit = TRUE;
                               break; 
                        } 

    }
    return 1;
    }
      

  2.   

    这个时候退出程序是否会出现内存遗漏?
    ________________
    不会. 系统会为你释放所有的内存, CLOSE 所有的 HANDLE, 释放所有的资源.
      

  3.   

    对于指向内存的指针,指针分配后初始化NULL,释放后NULL就可以了。
      

  4.   

    I think there is no memory leak...if you alloc memory in the program heap,