代码如下,请问这样写会产生内存泄露吗?wchar_t*Convertchar2Wchar( const char *orig )
{
size_t origsize = strlen(orig) + 1;
const size_t newsize = origsize;
size_t convertedChars = 0;
wchar_t* wcstring = new wchar_t[newsize];
mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);
return wcstring;
}
int _tmain(int argc, _TCHAR* argv[])
{
wstring pTest = Convertchar2Wchar("STUDSSSSSS23!");
cout<<pTest.c_str();
}

解决方案 »

  1.   

    会wchar_t* wcstring = new wchar_t[newsize];
    没见delete
      

  2.   

    有new就一定要delete.
    但是要遵循谁申请谁释放的原则.
      

  3.   

    有new没有delete 肯定会泄露的
      

  4.   

    BOOL Convertchar2Wchar( const char *orig ,wchar_t* wCh)传递指针进去写
      

  5.   

    改造如下:
    bool ConvertWchar2char(const wchar_t *orig,char *&nstring)
    {
    size_t origsize = wcslen(orig) + 1;
    const size_t newsize = origsize;
    size_t convertedChars = 0;
    nstring= new char[newsize];
    wcstombs_s(&convertedChars, nstring, origsize, orig, _TRUNCATE); return true;
    }
    以下是调用:
    wstring orig =L"HeLLO WORLS!";
    char * pTest = NULL;
    ConvertWchar2char( orig.c_str(),pTest);
    delete[] pTest;
    pTest = NULL;这样还会有内存泄露吗?有相关的测试工具吗?
      

  6.   

    外部new,再传指针进去,使用完后外部 delete
      

  7.   

    外部new的话,不知道多大合适!
      

  8.   

    传字符串的时候就知道他的长度,从而知道new 的大小
      

  9.   

    在return 前 delete 掉就行了。
      

  10.   

    不好意思,没看全,我觉得你这样弄得话不太合适,还不如再整个全局指针在return前接受一下,以方便在return前delete掉。不然会泄露。