我在运行尝试从剪贴板中读取时遇到内存泄漏。C++ MFC:从Char创建CString时发生内存泄漏*
样品的编号:
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检查。只需保持它在这里干净,以减少guard-clause代码的数量。
是什么rawClipboardData?它似乎没有任何标准。 – xaxxon
似乎问题来自'CString'您是否已经开始了解动态分配的位置? – George
@xaxxon rawClipboardData是一个CString变量,我简单地在堆栈上创建(发送“ch”字符指针到它的构造函数中)从char * – 10100111001