使用CString时是否会导致内存泄漏或段错误?



我有以下示例代码:

CString CHttpsClient::converEncoding(LPWSTR originalString, long encodingType)
{
if (encodingType == CP_ACP) {
return CString(originalString);
}
CString ret;
int nBufferSize = MultiByteToWideChar(encodingType, 0, (LPCCH)originalString, -1, NULL, 0); 
wchar_t *pBuffer = (wchar_t*)malloc(nBufferSize * sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0, (LPCCH)originalString, -1, pBuffer, nBufferSize * sizeof(wchar_t));
ret = CString(pBuffer);
free(pBuffer); 
return ret;
}

我的问题是当我调用这个方法时,我已经释放了pBuffer的内存,但是这个pBuffer仍然返回为CString(pBuffer),它会导致内存泄漏或段错误时使用CString这样?

我应该这样使用它,对吧?:

void CHttpsClient::converEncoding(CString& result, LPWSTR originalString, long encodingType)
{
if (encodingType == CP_ACP) {
return;
}
int nBufferSize = MultiByteToWideChar(encodingType, 0, (LPCCH)originalString, -1, NULL, 0); 
wchar_t *pBuf = result.GetBuffer(nBufferSize * sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0, (LPCCH)originalString, -1, pBuf, nBufferSize * sizeof(wchar_t));
}
void CHttpsClient::someMethod(){
CString text = _T("");
converEncoding(text, _T("Hello StackOverflow"), utf-8);
text.ReleaseBuffer();
}

最新更新