大家给看一下下列代码有内存泄露

gyj_china 2011-04-19 10:32:19
int __fastcall WatchMointor(char ppExeName[], int kill)
{
String ProcessName;
int ProcessSize;
bool ContinueLoop;
HANDLE FSnapshotHandle;
TProcessEntry32 FProcessEntry32;
char tmpExeName[MAX_WATCHEXE_NUM];
HANDLE pHand;

FSnapshotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize = sizeof(FProcessEntry32);
ContinueLoop = Process32First(FSnapshotHandle,&FProcessEntry32);

// 获取进程列表
while (ContinueLoop)
{
ProcessName = FProcessEntry32.szExeFile;
StrPCopy(tmpExeName, ProcessName);
if (stricmp(ppExeName, tmpExeName)==0)
{
if (kill == 1)
{
pHand = OpenProcess(1,false,FProcessEntry32.th32ProcessID);
if (pHand!=NULL)
TerminateProcess(pHand,-1);
CloseHandle(pHand);
pHand = NULL;
}
return 0;
}
ContinueLoop = Process32Next(FSnapshotHandle,&FProcessEntry32);
}

return -1;
}
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2011-04-21
  • 打赏
  • 举报
回复
同意4楼意见。
gyj_china 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fbmsyu 的回复:]

我试了试,tmpExeName 不够大的时候就会泄漏。
代码收藏了。哈哈。
[/Quote]
tmpExeName够了,有256字节存一个进程名应该有余吧!
fbmsyu 2011-04-19
  • 打赏
  • 举报
回复
我试了试,tmpExeName 不够大的时候就会泄漏。
代码收藏了。哈哈。
我不懂电脑 2011-04-19
  • 打赏
  • 举报
回复
自己放CodeGuard看内存漏洞吧。
CppFile 2011-04-19
  • 打赏
  • 举报
回复
在函数返回的时候,要加上
CloseHandle(FSnapshotHandle);

否则从进程管理器中可以看出,多次执行此函数,句柄在不断增加....

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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