本帖最后由 navyl 于 2010-01-22 09:40:41 编辑

解决方案 »

  1.   

    一般需要使用SysFreeString来释放,但这样看情况。
      

  2.   

    是new产生的么?一般不需要吧。
      

  3.   

    我跟踪了一下,执行了::SysFreeString(m_no);这条语句。
    ~Student
    {
    if(m_no)
    ::SysFreeString(m_no);
    }
      

  4.   

    如果放入了COleVariant就不需要释放,因为其析构会帮你处理。
    如果仅仅是ConvertStringToBSTR了,就需要自己最后去SysFreeString。
      

  5.   

    不需要啊,用boundersCheck检测一下就知道有没有内存泄露了~~
      

  6.   

    不好意思,可能是我没有说清楚,我的意思是
    1、BSTR m_no
    2、VARIANT m_no
      

  7.   

    1、BSTR m_no 
       m_no = _com_util::ConvertStringToBSTR("00000001"); 2、VARIANT m_no
       m_no.vt      = VT_BSTR; 
       m_no.bstrVal = _com_util::ConvertStringToBSTR("00000001");
      

  8.   


    都需要你自己调用SysFreeString去释放,否则你调用ConvertStringToBSTR而连带造成触发SysAllocString,从栈中开辟出的空间,谁给你释放?
      

  9.   


    我也是这样想,但是如果是第二种情况,即
    VARIANT m_no;
    这样的要怎样释放
      

  10.   

    VARIANT  用 VariantClear( ) 函数清楚
    VariantClear 会根据 VARIANT 的类型自动调用相应的资源释放函数下面是MSDN的说明If the vt member is VT_BSTR, the string is freed. If the vt member is VT_DISPATCH, the object is released. If the vt member has the VT_ARRAY bit set, the array is freed.
      

  11.   


    这要看你的应用情况,你都知道VARIANT里面放的是BSTR了,那么就直接释放m_no.bstrVal,或者调用楼上所说的VariantClear()去释放。