CreateProcess内存泄漏

kenshu 2014-11-10 07:32:01
一个程序A,使用CreateProcess调用另一个程序B多次,比如100,000次之后(B每次都主动 exit(0) ),任务管理器中显示A内存使用不变.
但整个WINDOWS内存使用量剧增.关掉A后,WINDOWS内存使用量会大量降下来。
是不是CreateProcess使用后,程序要主动销destroy什么东西?或是下面代码有什么问题?

代码如下:

/////////////////////////////////
long CRunTestApp::RunAndWait(CString as_command, bool ab_wait)
{

STARTUPINFOA lstr_startup;

lstr_startup.cb = 68;
lstr_startup.lpReserved = NULL;
lstr_startup.lpDesktop = NULL;
lstr_startup.lpTitle = NULL;
lstr_startup.dwX = 0;
lstr_startup.dwY = 0;
lstr_startup.dwXSize = 0;
lstr_startup.dwYSize = 0;
lstr_startup.dwXCountChars = 0;
lstr_startup.dwYCountChars = 0;
lstr_startup.dwFillAttribute = NULL;
lstr_startup.dwFlags = 1;


lstr_startup.wShowWindow = SW_SHOWNORMAL ;

lstr_startup.cbReserved2 = 0;
lstr_startup.lpReserved2 = NULL;
lstr_startup.hStdInput = NULL;
lstr_startup.hStdOutput = NULL;
lstr_startup.hStdError = NULL;


PROCESS_INFORMATION ls_info;
long i;
i = strlen(as_command)+1;
char * lc_command = new char[i];
// char lc_command[1024 * 4];
strcpy(lc_command,as_command);
if (CreateProcess(NULL,lc_command,NULL,NULL,NULL,NULL,NULL,NULL,&lstr_startup,&ls_info)){
if (ab_wait){
WaitForSingleObject(ls_info.hProcess,INFINITE);
}
delete []lc_command;
return 0;
}
delete []lc_command;
return -1;

}
/////////////////////////////////

VC6的完整工程在这里:

http://www.shuct.net/down.asp?id=20141110174316&check=A1701A01FEDBAAF11267021E047E6F49

其中,

CRunTestDlg::OnOK()
调用theApp.RunAndWait运行自己1000次
运行后,可以看到,在任务管理器中,内存使用多了几十M,当关掉后,内存就掉回去了
...全文
134 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenshu 2014-11-10
  • 打赏
  • 举报
回复
引用 1 楼 chenlycly 的回复:
1、将STARTUPINFO和PROCESS_INFORMATION变量,在使用前,都memset一下 2、创建进程后,要调用CloseHandle将进程句柄关闭掉,否则会有句柄泄漏
确实是CloseHandle的原因. 已结贴,谢谢!
dvlinker 2014-11-10
  • 打赏
  • 举报
回复
1、将STARTUPINFO和PROCESS_INFORMATION变量,在使用前,都memset一下 2、创建进程后,要调用CloseHandle将进程句柄关闭掉,否则会有句柄泄漏

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧