用c ++杀死进程并释放内存

时间:2015-07-15 06:21:58

标签: c++ window

我有一个服务,它创建一个进程,然后释放它的内存。 我使用createprocess()函数然后关闭进程和线程的句柄, 这是我的代码:

        if (CreateProcessA(NULL,
                           zAppName,//{ pointer to command line string }
                           NULL,     //{ pointer to process security attributes }
                           NULL,     //{ pointer to thread security attributes }
                           TRUE,     //{ handle inheritance flag }
                           0,
                           NULL,     //{ pointer to new environment  block }
                           NULL,     //{ pointer to current directory name }
                           &StartupInfo,    //{ pointer to STARTUPINFO }
                           &ProcessInfo))
    {
        WaitForSingleObject(ProcessInfo.hProcess,WaitMiliSec);
        GetExitCodeProcess(ProcessInfo.hProcess, &Result);

        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);    

        CloseHandle(hRead);
        CloseHandle(hWrite);
        return (Result);
    }

但是在closehandle()函数之后,hProcess和hThread仍然有价值! 每次我的服务运行此代码时内存增加而不会减少!!!这是内存泄漏吗? 我该怎么办?

1 个答案:

答案 0 :(得分:0)

当加载元素后,将进程加载到内存中:  1.code  2.memory  2.PCB  4.数据等 当您关闭句柄时,只释放堆的某些部分(假设您使用malloc来创建处理程序)。其余的元素仍然留在进程堆栈中。因此,您无法保证内存不会被释放。 是的hProcess和hThread可能有一些可能造成混淆的值。但是这些指针hProcess和hThread将被称为"悬空指针"。因此,在解除分配后为指针分配空值是一个好习惯。