Exception lstrcpy()导致visual C++;代码

Exception lstrcpy()导致visual C++;代码,exception,visual-c++,mfc,listctrl,Exception,Visual C++,Mfc,Listctrl,我使用MFC虚拟列表控件来增强性能,并处理GetDispInfo(NMHDR*pNMHDR,LRESULT*pResult)来填充ListCtrl。该方法中的相关代码如下所示: if(pItem->mask&&LVIF_文本) { 这里,当我使用lstrcpy()时,当我向下/向上滚动时,我在test_list_control.exe中得到了大量异常,如0x7c80c741处的第一次机会异常:0xC0000005:访问冲突写入位置0xb70bf2ac。这些消息出现在调试输出中。但是程序没有崩溃。

我使用MFC虚拟列表控件来增强性能,并处理GetDispInfo(NMHDR*pNMHDR,LRESULT*pResult)来填充ListCtrl。该方法中的相关代码如下所示:

if(pItem->mask&&LVIF_文本) {

这里,当我使用lstrcpy()时,当我向下/向上滚动时,我在test_list_control.exe中得到了大量异常,如0x7c80c741处的第一次机会异常:0xC0000005:访问冲突写入位置0xb70bf2ac。这些消息出现在调试输出中。但是程序没有崩溃。有人能解释一下这里的问题吗?我应该如何超限那是什么

rLabel是我前面声明的一个CLabelItem


谢谢!

我想你应该检查由pItem->pszText指向的缓冲区是否足够大,可以容纳rLabel.m_strText。或者rLabel.m_strText是否是正确的以null结尾的字符串。对我来说,这看起来像是在写未初始化的内存。使用调试器来检查这一点。

如果你看到的只是第一个异常,不要担心。Se例如e,但你可以在各地找到类似的页面(大部分是5-10年前的页面)。这意味着一些代码被抛出,异常被捕获并处理。我有时会在MFC应用程序中看到这一点。正如博客文章所说

第一次机会异常消息最多 通常并不意味着有问题 在代码中


我会等到你看到实际的错误后再开始考虑这个问题。

谢谢凯特,你的回答和链接帮助我克服了我的疑虑……:)
    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;
    }
}