2010-07-08 62 views
1

我使用MFC虛擬列表控件來增強性能,並且我處理GetDispInfo(NMHDR * pNMHDR,LRESULT * pResult)來填充ListCtrl。該方法中的相關代碼如下:lstrcpy()在Visual C++代碼中導致異常

如果(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向下/向上,我收到了很多例外情況,說:test_list_control.exe中0x7c80c741的第一次機會異常:0xC0000005:訪問衝突寫入位置0xb70bf2ac。這些消息出現在調試輸出中。但該程序不會崩潰。任何人都可以請解釋什麼這裏的事情,我應該如何克服?

rLabel是我早些時候聲明的CLabelItem。

謝謝!

回答

1

如果您看到的只是第一次機會異常事情,請不要擔心。例如,請參閱http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspx,但您可以在整個地方找到類似的頁面(大多數情況下是在5 - 10年前)。這意味着某些代碼丟失,異常被捕獲並處理。我有時會在MFC應用程序中看到這一點。正如博客中說

第一次機會異常的消息最 往往並不意味着沒有在代碼中的問題 。

我會等到你看到實際的錯誤,然後再討論這個問題。

+0

謝謝凱特,你的回答和鏈接幫助我克服了我的疑惑...... :) – Izza 2010-07-09 03:45:07

1

我想你應該檢查一下,如果由pItem-> pszText指向的緩衝區足夠大以容納rLabel.m_strText。或者,如果rLabel.m_strText是空的終止字符串。對我來說,這看起來像寫入未初始化的內存。使用調試器來檢查這一點。

相關問題