0

Visual Studio の出力ウィンドウに次のエラーが表示されます。

First-chance exception at 0x5d0d47af (msvcr100d.dll) in Program.exe: 0xC0000005: Access violation reading location 0xcccccccc.

このコードが実行されるたびに:

const int iItem = ListView_GetItemCount(hListOutput);

LVITEM lvI;

lvI.mask        = LVIF_TEXT | LVIF_GROUPID;
lvI.iSubItem    = 0;
lvI.iGroupId    = 101;
lvI.iItem       = iItem;
lvI.pszText     = const_cast<LPWSTR>(mystr.c_str());

if (ListView_InsertItem(hListOutput, &lvI) != -1)
{
    ListView_SetCheckState(hListOutput, iItem, TRUE);
}

をコメントアウトするとListView_SetCheckState、アクセス違反が発生しなくなります。

すべての項目が挿入され、項目チェック状態が設定されています。
しかし、アクセス違反が発生する理由を理解したいと思います。

4

2 に答える 2

1

ListView_SetCheckState(hListOutput、iItem、TRUE);

これは、リストで使用可能な値より1大きい値を指すため、エラーのように見えます(ゼロがインデックス付けされているため)。

試す

unsigned int iItem1=iItem-3;//anything greater than zero..

ListView_SetCheckState(hListOutput,iItem1, TRUE);
于 2012-08-17T15:39:34.707 に答える
0

ListView_InsertItem の戻り値は iItem と同じですか? MSDN ドキュメントは、項目インデックスが挿入関数から返されることを示しているため、チェック状態を設定するときにその値を使用するのがおそらく最も安全です。

于 2012-08-20T03:04:09.880 に答える