簡體   English   中英

使用CString時會不會導致memory泄漏或段錯誤

[英]Will it cause memory leak or segfault when using 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 的 memory,但是這個 pBuffer 仍然作為 CString(pBuffer) 返回,這樣使用 CString 時會導致 memory 泄漏或段錯誤嗎?

所以,我應該這樣使用它,對吧?:

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM