看了以下的一段代码,不解,请问COM高手.
BSTR bstrOS;
hr = pISimple01->GetOSVersion(&bstrOS);
.......
char *pszOS;
pszOS = _com_util::ConvertBSTRToString(bstrOS); 
printf("The OS is %s\n", pszOS);
SysFreeString(bstrOS);
delete pszOS;_com_util的二个转换函数是不是动态申请了内存,不能调入到里面去看(晕)
delete pszOS可以吗,好像只删除一个字节,平常我们都是用
char *pNew = new char[NEWLEN * sizeof(char));
delete []pNew;

解决方案 »

  1.   

    如果是动态分配内存的话,应该有说明,并且说明使用什么函数释放内存。如果可以用delete释放内存的话,应该使用delete []pszOS;形式释放内存。
      

  2.   

    是分配了的,delete错Example
    // ConvertBSTRToString.cpp
    #include <comutil.h>
    #include <stdio.h>
    #pragma comment(lib, "comsupp.lib")
    int main()
    {
       BSTR bstrText = ::SysAllocString(L"Test");
       wprintf(L"BSTR text: %s\n", bstrText);
       char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
       printf("char * text: %s\n", lpszText2);
       SysFreeString(bstrText);
       delete[] lpszText2;
    }这段是MSDN上的
      

  3.   

    ConvertBSTRToString 确实申请了需要客户来释放的内存。因为BSTR是Basice字符串对象,所以用delete 就可以释放。楼上的老兄说那段代码来自msdn.鉴于msdn的权威性。可以用delete[]一试。
      

  4.   

    也可以使用
    free(lpszText2)释放
      

  5.   

    <Effective C++> 讲的很精辟的:)
      

  6.   

    楼上的兄弟,你们是怎么查MSDN的
    我不管是哪种方式但,都找不到_com_util这个东东
    更不用说ConvertBSTRToString这个涵数了