我有一个服务,它创建一个进程,然后释放它的内存。 我使用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仍然有价值! 每次我的服务运行此代码时内存增加而不会减少!!!这是内存泄漏吗? 我该怎么办?
答案 0 :(得分:0)
当加载元素后,将进程加载到内存中: 1.code 2.memory 2.PCB 4.数据等 当您关闭句柄时,只释放堆的某些部分(假设您使用malloc来创建处理程序)。其余的元素仍然留在进程堆栈中。因此,您无法保证内存不会被释放。 是的hProcess和hThread可能有一些可能造成混淆的值。但是这些指针hProcess和hThread将被称为"悬空指针"。因此,在解除分配后为指针分配空值是一个好习惯。