急!
帮我看看下面的代码,一个是销毁,一个是清空。销毁可以释放内存,但是清空却引起内存泄漏.另外销毁的时候,出现下面的内存泄漏情况:
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;
}