2012-08-17 39 views
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,我會停止訪問衝突。

正在插入所有項目並正在設置項目檢查狀態。
但我想弄清楚爲什麼我得到訪問衝突。

+0

您是否記得調用'ListView_SetExtendedListViewStyle'設置'LVS_EX_CHECKBOXES'擴展樣式? 「ListView_SetCheckState」被記錄爲僅與'LVS_EX_CHECKBOXES'列表視圖一起使用。 – 2012-08-20 06:23:43

回答

1

ListView_SetCheckState(hListOutput,的iItem,TRUE);

這一個看起來像錯誤,因爲它會指向一個大於列表中可用的值(因爲零索引)。

嘗試

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

ListView_SetCheckState(hListOutput,iItem1, TRUE); 
+0

我在設置檢查狀態之前插入了項目,所以不應該是問題。查看更新的代碼。 – Josh 2012-08-17 15:46:07

+0

首先檢查插入是否成功,但是如果我提供的代碼正在工作,那麼必須有插入失敗。另外請讓我知道。 – perilbrain 2012-08-17 15:49:51

+0

插入成功。我插入4個項目,並插入所有4個項目。我也檢查了返回值以確保沒有問題。 – Josh 2012-08-17 15:52:55

0

等於的iItem ListView_InsertItem的返回值? MSDN文檔指出項目索引是從插入函數返回的,所以在設置檢查狀態時使用該值可能是最安全的。

相關問題