return之后如何释放char数组呢?
How to release the char array after return it?
伙计,我在下面的代码片段
中混淆了如何释放对象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创建一个对象,我必须手动释放它,但在这种情况下,我必须return这个值。如果我释放它,我就不能再使用它了。
我需要释放 pResult 吗?如果是,请告诉我该怎么做。
您必须在UnicodeToAnsi()
编辑的指针return上调用delete []
。
否则会发生内存泄漏。
例如:
char* ansi_str = UnicodeToAnsi(regionValue, region_str_len);
string region_str(ansi_str);
delete [] ansi_str;
但是,正确的 C++ 解决方案是将 UnicodeToAnsi()
return 设为 std::string
并使用它:
string region_str = UnicodeToAnsi(regionValue, region_str_len);
伙计,我在下面的代码片段
中混淆了如何释放对象pResultinline 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创建一个对象,我必须手动释放它,但在这种情况下,我必须return这个值。如果我释放它,我就不能再使用它了。
我需要释放 pResult 吗?如果是,请告诉我该怎么做。
您必须在UnicodeToAnsi()
编辑的指针return上调用delete []
。
否则会发生内存泄漏。
例如:
char* ansi_str = UnicodeToAnsi(regionValue, region_str_len);
string region_str(ansi_str);
delete [] ansi_str;
但是,正确的 C++ 解决方案是将 UnicodeToAnsi()
return 设为 std::string
并使用它:
string region_str = UnicodeToAnsi(regionValue, region_str_len);