返回后如何释放char数组?

时间:2015-02-09 07:55:28

标签: c++ visual-c++ memory-management

盖伊,我很困惑如何在下面的代码片段中释放对象 pResult

inline char* UnicodeToAnsi(const wchar_t* szStr, int& nLen)
    {
        nLen = WideCharToMultiByte(CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL);
        if (nLen == 0)
            return NULL;

        char* pResult = new char[nLen];
        WideCharToMultiByte(CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL);

        return pResult;
    }

我在以下地址致电:

string region_str(UnicodeToAnsi(regionValue, region_str_len));

在C ++中如果我们用new创建一个对象,我必须手动释放它,但在这种情况下,我必须返回值。如果我发布它,我就不能再使用它了。

我是否需要发布 pResult ?如果有,请告诉我该怎么做。

1 个答案:

答案 0 :(得分:2)

必须delete []返回的指针上调用UnicodeToAnsi()

否则,您将发生内存泄漏。


例如:

char* ansi_str = UnicodeToAnsi(regionValue, region_str_len);
string region_str(ansi_str);
delete [] ansi_str;

但是,正确的C ++解决方案是让UnicodeToAnsi()返回std::string并使用它:

string region_str = UnicodeToAnsi(regionValue, region_str_len);