Exception lstrcpy()导致visual C++;代码
我使用MFC虚拟列表控件来增强性能,并处理GetDispInfo(NMHDR*pNMHDR,LRESULT*pResult)来填充ListCtrl。该方法中的相关代码如下所示: if(pItem->mask&&LVIF_文本) { 这里,当我使用lstrcpy()时,当我向下/向上滚动时,我在test_list_control.exe中得到了大量异常,如0x7c80c741处的第一次机会异常:0xC0000005:访问冲突写入位置0xb70bf2ac。这些消息出现在调试输出中。但是程序没有崩溃。有人能解释一下这里的问题吗?我应该如何超限那是什么 rLabel是我前面声明的一个CLabelItemException 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。这些消息出现在调试输出中。但是程序没有崩溃。
谢谢!我想你应该检查由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;
}
}