【发布时间】:2011-04-12 13:23:46
【问题描述】:
我不确定从下面的代码中获取此类错误(堆损坏)的根本原因是什么。当我逐步执行程序时,TCHAR 值被正确分配并复制到剪贴板数据。但是,当它继续执行 SetClipboardData(...) 时会崩溃。
有哪位大师能帮忙找出错误吗?
提前致谢。
错误对话框:
04A781C0 处的堆块已修改为 04A78282 过去请求的 ba 大小 Windows 触发了一个断点 V4.exe。
这可能是由于 堆,表示 V4.exe 中的错误 或它已加载的任何 DLL。
这也可能是由于用户 在 V4.exe 获得焦点时按 F12。
输出窗口可能有更多 诊断信息。该程序 '[10840] V4.exe: Native' 已退出 代码为 0 (0x0)。
代码:
int nCount = m_ListBox.GetCount();
CString szTemp, szText;
for(int i=0; i<nCount; i++)
{
m_ListBox.GetText(i, szTemp);
szText = szText + _T("\n") + szTemp;
}
if(OpenClipboard())
{
EmptyClipboard();
HGLOBAL hClipboardData;
size_t size = (szText.GetLength()+1) * sizeof(TCHAR);
hClipboardData = GlobalAlloc(NULL, size);
TCHAR* pchData = (TCHAR*)GlobalLock(hClipboardData);
_tcscpy_s(pchData, size, LPCTSTR(szText));
#ifdef _UNICODE
SetClipboardData(CF_UNICODETEXT, hClipboardData); //--> crash here
#else
SetClipboardData(CF_TEXT, hClipboardData);
#endif
GlobalUnlock(hClipboardData);
CloseClipboard();
}
列表框数据:
John Smith 1978
Angelina 1975
Brad Pitt 1950
【问题讨论】:
标签: c++ heap-memory clipboard heap-corruption