求教C++高手:内存开销怎么越来越大?

来源:百度知道 编辑:UC知道 时间:2024/05/14 02:12:49
请看下面的线程函数:(请不要在该函数功能上做过多讨论)
UINT FloodStart(LPVOID pParam)
{

::WaitForSingleObject(EVStart,INFINITE);
CInternetSession session;
CInternetFile* file = NULL;
while(TRUE)
{
if(Pause)
{
Sleep(100);
continue;
}
else
{
try
{
file = (CInternetFile*) session.OpenURL(URL);
}
catch (CInternetException* m_pException)
{
file = NULL;
m_pException->Delete();
}
if (file)
{
::PostMessage((HWND)pParam,WM_MYMESSAGE,0,0);
file=NULL;
Sleep(1);
}
else
{
::PostMessage((HWND)pParam,WM_MYMESSAGE,1,0);
Sleep(100);
}
}
}
return 0;
}
问题是当这个线程函数被激发时,我发现随时间推移,主进程所占内存迅速上升,大概30秒左右之后,就将占去37M的内存,马上导致程序无法运行。
请问:这是怎么回事?怎么解决?
我想可能是file和session所占据的内存没有释放,怎么释放呢?
还有一个问题,我发现最外层的while(TRUE)循环执行6次后就把整个线程函数挂在file = (CIn

你可以用new和delete运算符动态地分配内存,然后再释放内存
int* p = new int;
delete p;

鄙人不会C++,线程更不会,不过我觉得在错误处理加上finally看看行不
在catch后面加finally
try
{
file = (CInternetFile*) session.OpenURL(URL);
}
catch (CInternetException* m_pException)
{
file = NULL;
m_pException->Delete();
}
finally
{
delete file;//释放内存,可能不对,不过我觉得应该在这里将内存释放掉
}

注意所有的new都要有delete配对就行了。

把你的进程目录和使用内存看看
对使用内存大的 名字记下来 用百度搜索
看是不是是病毒 如果是 就杀毒 杀毒软件杀不了
搜索专杀 杀。

因为是别的程序用了NEW注册了堆区的空间!你必须在程序运行完之后在进行delete
比如:
void main()
{
a=new char;
a=5
cout<<a<<endl;
}
if(a)delete a;

你的file没关闭吧!
CInternetFile类有个Close函数