Я не уверен, что является основной причиной получения такой ошибки (Heap Corruption) из приведенного ниже кода. Когда я просматриваю программу, значение TCHAR правильно распределяется и копируется в данные буфера обмена. Тем не менее, он падает, когда он переходит к SetClipboardData (...).Повреждение кучи во время SetClipboardData()
Может ли любой гуру найти ошибку?
Заранее спасибо.
Dialog Ошибки:
Heap блок в 04A781C0 модифицирован в 04A78282 прошлого запрошенного размера ба Windows, вызвал точку останова в V4.exe.
Это может быть связано с повреждением кучи , что указывает на ошибку в V4.exe или на любую из загруженных DLL-файлов.
Это может быть связано с сообщением пользователя нажатиями F12, а V4.exe - с фокусом.
Выходное окно может содержать более диагностическую информацию. Программа '[10840] V4.exe: родной' вышел с кодом 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();
}
List Box данные:
John Smith 1978
Angelina 1975
Brad Pitt 1950
+1, за исключением того, что в соответствии с http://msdn.microsoft.com/en-us/library/td1esda9(VS.80).aspx это не подушечка до конца, но заполняет весь буфер 0xFD перед копированием. – sharptooth
Прохладный ... Он работает после того, как я заменил _tcscpy_s на memcpy. – wengseng
Спасибо за помощь, Алекс. – wengseng