C++ 在c+中终止进程并释放内存+;

C++ 在c+中终止进程并释放内存+;,c++,window,C++,Window,我有一个服务,它创建一个进程,然后释放内存。 我使用createprocess()函数,然后关闭进程和线程的句柄, 这是我的代码: if (CreateProcessA(NULL, zAppName,//{ pointer to command line string } NULL, //{ pointer to process security attribute

我有一个服务,它创建一个进程,然后释放内存。 我使用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.代码 2.记忆 2.PCB 4.数据等。 当您关闭句柄时,只释放堆的一部分(假设您正在使用malloc创建句柄)。因此,其余元素仍保留在进程堆栈中。所以你不能保证内存不会被释放。
是的,hProcess和hThread可能有一些值会造成混淆。但这些指针hProcess和hThread将被称为“悬挂指针”。因此,在取消分配后为指针分配一个空值是一种很好的做法。

从句柄仍有其值这一事实来看,并不意味着进程仍处于活动状态。但是内存呢?当流程发布它时!?(@marom)你有理由相信有些记忆没有被释放吗?您自己的程序中的一些int值没有任何意义。是的,在我创建进程后,内存增加了,我在taskmanager中看到,在我关闭句柄并结束函数后,内存没有释放(@deviantfan)WaitMiliSec有多长?您确定它足够长,进程可以终止吗?其余元素仍保留在堆栈中?这是内存泄漏吗?当进程最终终止时,实际上不会卸载任何其他元素。但如果不关闭处理程序,则会造成内存泄漏(因为处理程序是从堆中分配的)。感谢您的回复@userNishant。我关闭了处理程序,但每次我的服务运行此代码时,我都会在任务管理器中看到内存增加!!!当主进程(我指的是我的服务)终止时,是否卸载其余元素?实际上,当每次加载主进程时,进程元素也将被加载,当进程终止时,操作系统将取消分配给主进程的资源。所以,您知道为什么任务管理器中显示的内存在我创建进程时会增加而不会减少吗!?如果我运行这段代码10倍,内存也会增加10倍!!!:(