就执行了这两句:
int i;
HSZ hszItem = DdeCreateStringHandle(idInst, citemname, 0);
i=DdeFreeStringHandle(idInst, hszItem);
返回值为1,但是内存并没有释放掉,每执行一次就会吃掉一些内存..
为什么?

解决方案 »

  1.   

    判断一下DdeCreateStringHandle的返加值
    if (!hszItem)
    {     出错
    }DdeInitialize
    DdeUninitialize
    是否调用了
      

  2.   

    在程序初始化时调用了DdeInitialize....  得到idInst现在改成这样;
    int i;
    HSZ hszItem = DdeCreateStringHandle(idInst, citemname, 0);
    if (!hszItem)
    {AfxMessageBox("Error!");  //根本就不会执行到这里
    }
    i=DdeFreeStringHandle(idInst, hszItem);
    仍旧
      

  3.   

    我已经做了测试程序,没有问题。
    for(int i=0; i<10000; i++)
    {   
       DWORD idInst = 0;
       if(DdeInitialize(&idInst,NULL,APPCMD_CLIENTONLY,0)!= DMLERR_NO_ERROR)
       {
    ::MessageBox(   0,"Initialization failed.", "DDEML Client", 
                   MB_ICONSTOP|MB_TASKMODAL);
    return;
       }

       int i;    DWORD cb; 
       HSZ hszItem = DdeCreateStringHandle(idInst, "GroupWise",   CP_WINANSI);
       if (!hszItem)
       {
              AfxMessageBox("Error!");   
       }
       i=DdeFreeStringHandle(idInst, hszItem);
       DdeUninitialize(idInst);
    }
      

  4.   

    程序退出时才调用DdeUninitialize
    运行是一直保持连接
      

  5.   

    证明hszItem 这个为空,DdeCreateStringHandle没有执行
      

  6.   

    还是没有错,你再试试吧
    DWORD idInst = 0;
    if(DdeInitialize(&idInst,NULL,APPCMD_CLIENTONLY,0)!= DMLERR_NO_ERROR)
    {
    ::MessageBox(   0,"Initialization failed.", "DDEML Client", 
                   MB_ICONSTOP|MB_TASKMODAL);
    return;
    }for(int i=0; i<1000; i++)
    {   

        DWORD cb; 
        HSZ hszItem = DdeCreateStringHandle(idInst, "GroupWise",   CP_WINANSI);
        if (!hszItem)
       {
           AfxMessageBox("Error!");  //根本就不会执行到这里
       }
       i=DdeFreeStringHandle(idInst, hszItem);
    }
    DdeUninitialize(idInst);
      

  7.   

    TO MZP(mzp) 用你的代码是没有问题
    我的程序还有DdeConnect的过程
    但问题肯定是出在我说的地方
      

  8.   

    TO MZP(mzp)
    问题解决后一定另开贴给分
      

  9.   

    你的代码改了一下还是泄漏了
    DWORD idInst = 0;
    if(DdeInitialize(&idInst,NULL,APPCMD_CLIENTONLY,0)!= DMLERR_NO_ERROR)
    {
    ::MessageBox(   0,"Initialization failed.", "DDEML Client", 
                   MB_ICONSTOP|MB_TASKMODAL);
    return;
    }for(int i=0; i<1000; i++)
    {
        HSZ hszItem = DdeCreateStringHandle(idInst, "GroupWise",   CP_WINANSI);
        if (!hszItem)
       {
           AfxMessageBox("Error!");  //根本就不会执行到这里
       }
       DdeFreeStringHandle(idInst, hszItem);
    }
    DdeUninitialize(idInst);
      

  10.   

    晕,折腾了半天,只要不开ddespy就没事
    为了监视运行选中了 DDESpy -> Monitor -> Posted DDE Message
    运行ddespy后退出ddespy都不行
    之后再怎么用就都是泄漏的了
    怎么解决?
      

  11.   

    目前状态时是只要DDESpy中Track过String Handles
    msdn中给的的例子都会出现内存不断增长的情况