当我运行尝试从剪贴板读取时,我遇到了内存泄漏。
示例代码:
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 检查。只是在这里保持清洁以减少保护子句代码的数量。