1

パフォーマンスを向上させるために MFC 仮想リスト コントロールを使用し、GetDispInfo(NMHDR* pNMHDR, LRESULT* pResult)を処理して ListCtrl を設定しました。そのメソッドの関連コードは次のとおりです。

if (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() を使用すると、上下にスクロールすると、test_list_control.exe の 0x7c80c741 で First-chance exception: 0xC0000005: Access violation writing location 0xb70bf2ac という例外が大量に発生します。これらのメッセージは、デバッグ出力に表示されます。しかし、プログラムはクラッシュしません。ここで何が問題なのか、どうすればそれを克服できるのか説明してもらえますか??

rLabel は、先ほど宣言した CLabelItem です。

ありがとうございました!

4

2 に答える 2

1

pItem->pszText が指すバッファが rLabel.m_strText を保持するのに十分な大きさかどうかを確認する必要があると思います。または、rLabel.m_strText が正しい場合は、null で終了する文字列です。私にとって、これは初期化されていないメモリを書き込んでいるように見えます。これを確認するには、デバッガを使用します。

于 2010-07-08T08:12:54.733 に答える
1

最初のチャンスの例外的なものしか表示されない場合は、心配する必要はありません。たとえば、http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspxを参照してください。ただし、同様のページがいたるところにあります (ほとんどが 5 ~ 10 年前のものです)。一部のコードがスローされ、例外がキャッチされて処理されました。これは MFC アプリで時々見られます。ブログのエントリにあるように

最初のチャンスの例外メッセージは、ほとんどの場合、コードに問題があることを意味するものではありません。

この問題に取り組む前に、実際のエラーが表示されるまで待ちます。

于 2010-07-08T12:50:30.357 に答える