lstrcpy () вызывает исключения в визуальном коде C ++ - PullRequest
1 голос
/ 08 июля 2010

Я использовал элемент управления виртуальным списком MFC для повышения производительности и обрабатываю GetDispInfo (NMHDR * pNMHDR, LRESULT * pResult) для заполнения ListCtrl. Соответствующий код в этом методе выглядит следующим образом:

if (pItem-> mask && 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 (), когда я выполняю прокрутку вниз / вверх, я получаю множество исключений, говорящих Исключение первого шанса в 0x7c80c741 в test_list_control.exe: 0xC0000005: Место записи нарушения доступа 0xb70bf2ac . Эти сообщения появляются в выходных данных отладки. Но программа не падает. Может кто-нибудь объяснить, в чем здесь дело и как мне это преодолеть ??

rLabel - это CLabelItem, который я объявил ранее.

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Если все, что вы видите, это исключение из первого шанса, перестаньте беспокоиться. См., Например, http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspx, но вы можете найти похожие страницы повсюду (в основном, 5-10 лет назад). Это означает, что какой-то код сработал, а исключение было обнаружено и обработано. Я вижу это в приложениях MFC несколько раз. Как говорится в записи блога

Большинство сообщений об исключениях первого шанса часто не означает, что есть проблема в коде.

Я бы подождал, пока вы не увидите реальные ошибки, прежде чем приступить к работе над этим.

1 голос
/ 08 июля 2010

Я думаю, вы должны проверить, достаточно ли большой буфер, на который указывает pItem-> pszText, чтобы содержать rLabel.m_strTextИли, если rLabel.m_strText - правильная строка с нулевым символом в конце.Для меня это выглядит как запись неинициализированной памяти.Используйте отладчик, чтобы проверить это.

...