为什么我做一个定时器不停的调用以下代码,内存(物理内存和虚拟内存都增长)会不停的增长呢?
BOOL GetHistory()
{
STATURL url;
CString strUrl; ULONG uFetched;

IUrlHistoryStg2Ptr history;
IEnumSTATURLPtr enumPtr; if(FAILED(CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg2,(void**)&history)))
{
return false;
} if(FAILED(history->EnumUrls(&enumPtr)))
return false; while(SUCCEEDED(enumPtr->Next(1,&url,&uFetched)))
{
if(uFetched==0)
break;
         }
history->Release();
return true;
}

解决方案 »

  1.   

    可能是history还没有得到完,还在while循环中,你又启动timer,
    试试把timer的间隔时间设置长点,看是否情况依旧。。
      

  2.   

    你有两个return false 的地方都没有 history->Release();
    无论如何这么写都有问题
      

  3.   

    你这个函数正确运行了么?由于你只在return TRUE前调用history->Release();那么如果if(FAILED(history->EnumUrls(&enumPtr)))
    return false;就返回了,则history就没有被release掉了。所以你调试一下看看。
      

  4.   

    if(FAILED(history->EnumUrls(&enumPtr)))
    return false;                  直接返回了,不需要Release?
      

  5.   

    STATURL里面应该有BSTR没有释放
      

  6.   

    每次运行都没有return FALSE;
    所以加上也一样。
    如果屏蔽掉while(SUCCEEDED(enumPtr->Next(1,&url,&uFetched)))
    {
    if(uFetched==0)
    break;
             }
    ,内存就不会增长,为什么?
    问题就出在上面的语句里,
    怎么释放分配给url的内存?
      

  7.   

    http://www.codeguru.com/Cpp/I-N/ieprogram/article.php/c4389/
      

  8.   

    url在while外面用到了吗?还是就为了Next()而存在的?什么地方不用了什么地方释放
      

  9.   

    while(SUCCEEDED(enumPtr->Next(1,&url,&uFetched)))
    {
        if(uFetched==0)
    break;
        //怎么在这里把url释放掉?
        //有人知道吗?
    }
      

  10.   

    history->Release();
    在while外面释放。。
      

  11.   

    小三,我是在while外面释放的啊!
      

  12.   

    你试你过把timer的时间延长没。
      

  13.   

    msdn上说在每次enumPtr->Next()后必须释放STATURL.pwcsUrl and STATURL.pwcsTitle .
    但我不知道该怎么释放,有没有知道的?