簡體   English   中英

C ++ MFC:從Char *創建CString時內存泄漏

[英]C++ MFC: Memory Leak When Creating CString From Char*

我嘗試從剪貼板讀取內容時遇到內存泄漏。

樣例代碼:

void SomeFunction()
{
   OpenClipboard(nullptr);
   HGLOBAL hglb = GetClipboardData(CF_TEXT);
   char* ch = static_cast<char*>(GlobalLock(hglb));

   CString rawClipboardData(ch);

   GlobalUnlock(hglb);
   CloseClipboard();
}

根據Visual Studio,它是上方的中間行,導致內存泄漏。 該行:

CString rawClipboardData(ch);

如果我不運行它,則沒有泄漏報告。 但是,如果我運行它,則會在Visual Studio輸出窗口中獲得以下調試輸出:

Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\strcore.cpp(158) : {75645} normal block at 0x00000000072C89A0, 52 bytes long.
Data: <`x              > 60 78 F7 D3 FE 07 00 00 0D 00 00 00 0D 00 00 00
Object dump complete.

有任何想法嗎?

更新:在上面的代碼中添加了OpenClipboard(nullptr)。 在真實代碼中也有nullptr-checks。 只是保持此處干凈以減少保護條款的數量。

GlobalLock(hglb)應該是LPTSTR所以我認為泄漏是由強制轉換為char*引起的。 對於Unicode平台,TCHAR被定義為WCHAR類型的同義詞。

你應該能夠做類似的事情

CString rawClipboardData = GlobalLock(hglb);

如果沒有

CString rawClipboardData;
LPTSTR lptstr = GlobalLock(hglb);
rawClipboardData = lptstr;

肯定會工作

暫無
暫無

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

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