急!

huaxu2002 2006-05-29 08:57:40
帮我看看下面的代码,一个是销毁,一个是清空。销毁可以释放内存,但是清空却引起内存泄漏.另外销毁的时候,出现下面的内存泄漏情况:
Detected memory leaks!
Dumping objects ->
c:\program files\microsoft visual studio\vc98\include\crtdbg.h(552) : {945} normal block at 0x01258EA0, 65536 bytes long.
Data: <8 > 38 0D 00 00 08 00 00 00 05 00 04 00 A0 D7 89 81
Object dump complete.

/*
功能:销毁进程信息链表
参数:pProcess->进程信息链表结构
返回值:
*/
void CProcessControl::DestroyAppProcess(pAppProcess &pProcess)
{

pAppProcess p;
pAppThread q;
pAppModule s;
while (pProcess)
{
while (pProcess->pThread) //销毁进程创建的线程
{
q = pProcess->pThread->pThreadNext;
free(pProcess->pThread);
pProcess->pThread = q;
}
while (pProcess->pModule) //销毁进程所拥有的模块
{
s = pProcess->pModule->pModuleNext;
free(pProcess->pModule);
pProcess->pModule =s;
}
while (pProcess->pTime) //销毁进程创建时间
{
free(pProcess->pTime);
pProcess->pTime = NULL;
}
while (pProcess->pPort)
{
free(pProcess->pPort);//此处注意:如果不添加,则引起内存泄漏,若添加,程序则过不去
pProcess->pPort = NULL;
}

p = pProcess->pProcessNext;
free(pProcess);
pProcess = p;
}
}
/*
功能:清空进程信息链表
参数:pProcess->进程信息链表结构
返回值:
*/
BOOL CProcessControl::ClearAppProcess(pAppProcess pProcess)
{
pAppProcess p, q;
p = pProcess->pProcessNext;
pAppThread pThread1, pThread2;
pThread1 = p->pThread;
pAppModule pModule1, pModule2;
pModule1 = p->pModule;
while(p)
{
q = p->pProcessNext;
while (pThread1) //由于pThread和pModule都是pProcess->pProcessNext这个结点生成的,所以
{ //pThread和pModule都要销毁
pThread2 = pThread1->pThreadNext;
free(pThread1);
pThread1 = pThread2;
}
while (pModule1)
{
pModule2 = pModule1->pModuleNext;
free(pModule1);
pModule1 = pModule2;
}

free(p->pTime);
free(p->pPort);
p->pModule = NULL;
p->pThread = NULL;
p->pTime = NULL;
p->pPort = NULL;
free(p);
p = q;
}
pProcess->pProcessNext = NULL;
return true;
}
...全文
70 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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