Я использовал MFC виртуальное управление списком для улучшения производительности, и я обрабатываю GetDispInfo (NMHDR* pNMHDR, LRESULT* pResult) для заполнения ListCtrl. Соответствующие нормы в том методе следующие:
если (pItem-> маска && LVIF_TEXT) {
switch(pItem->iSubItem)
{
case 0:
lstrcpy(pItem->pszText, rLabel.m_strText);
break;
case 1:
sprintf(pItem->pszText, "%d", p.o_Value);
break;
default:
ASSERT(0);
break;
}
}
Здесь, когда я использую lstrcpy (), когда я - srolling вниз/, я получаю большое исключения, говоря исключение Первого шанса в 0x7c80c741 в test_list_control.exe: 0xC0000005: местоположение записи Нарушения прав доступа 0xb70bf2ac. Эти сообщения появляются в выводе отладки. Но программа не отказывает. Кто-либо может объяснить, что вопрос здесь и как я должен преодолеть это??
rLabel является CLabelItem, который я объявил ранее.
Спасибо!
Если все, что вы видите - это исключение первого шанса, перестаньте беспокоиться. Смотрите, например, http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspx, но вы можете найти подобные страницы повсюду (в основном 5-10 лет назад). Это означает, что какой-то код бросил, и исключение было поймано и обработано. Иногда я вижу это в приложениях MFC. Как написано в блоге
Сообщения об исключениях при первой возможности чаще всего чаще всего не означают, что есть проблема в коде.
Я бы подождал, пока вы увидите реальные ошибки, прежде чем переживать по этому поводу.
Я думаю, вам следует проверить, достаточно ли велик буфер, на который указывает pItem->pszText, чтобы вместить rLabel.m_strText. Или если rLabel.m_strText является корректной строкой с нулевым окончанием. Для меня это похоже на запись неинициализированной памяти. Используйте отладчик, чтобы проверить это.