DWORD InternetGetFile (CString szUrl,BYTE* bits)
{

DWORD dwFlags; CHAR strAgent[64];
HINTERNET hOpen; DWORD dwSize;
CHAR   szHead[] = "Accept: r\n\r\n";
HINTERNET  hConnect; InternetGetConnectedState(&dwFlags, 0); if(!(dwFlags & INTERNET_CONNECTION_PROXY))
hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
else
hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(!hOpen)
{
return 0;
} if ( !(hConnect = InternetOpenUrlA ( hOpen, szUrl, szHead,
 lstrlenA (szHead), INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0)))
{
   return 0;
} if (!InternetReadFile (hConnect, bits, 180000,  &dwSize))
{
return 0;
} InternetCloseHandle(hConnect);
InternetCloseHandle(hOpen); return dwSize;
}一直调用这个函数,然后它占用的内存就一直增加……求解,先谢谢各位大侠!

解决方案 »

  1.   

    你看你中间的那些return语句,都没关闭句柄就return掉
      

  2.   

    你把那2个char数组也释放掉看看?
      

  3.   

    那二个char数组是在栈里的,系统自己释放……
      

  4.   

    WinInet有Bug的,就是当连接网页超时时,会发生阻塞,这些函数是用的阻塞式(同步)通信模式可能你的函数虽然运行完了,但是那些线程还是阻塞在那里,所以就内存上去了WaitForSingleObjecthConnect/hOpen,timeout)设置超时等待,如果时间到了的话,就将他们InternetCloseHandle
      

  5.   

    DWORD InternetGetFile (CString szUrl,BYTE* bits) 
    { DWORD dwFlags; CHAR strAgent[64]; 
    HINTERNET hOpen(NULL); DWORD dwSize; 
    CHAR  szHead[] = "Accept: r\n\r\n"; 
    HINTERNET  hConnect*NULL); InternetGetConnectedState(&dwFlags, 0); if(!(dwFlags & INTERNET_CONNECTION_PROXY)) 
    hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0); 
    else 
    hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 
    if(!hOpen) 

    goto Exit; 
    } if ( !(hConnect = InternetOpenUrlA ( hOpen, szUrl, szHead, 
    lstrlenA (szHead), INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0))) 

      goto Exit; 
    } if (!InternetReadFile (hConnect, bits, 180000,  &dwSize)) 

    goto Exit; 

    Exit:
    if(hConnect)
    InternetCloseHandle(hConnect); 
    if(hOpen)
    InternetCloseHandle(hOpen); return dwSize; 
    } 试试这样怎么问题变成10分了?
      

  6.   

    上面的HINTERNET  hConnect*NULL); 
    是HINTERNET  hConnect(NULL);