2012-08-17 6 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

'LVS_EX_CHECKBOXES' 확장 스타일을 설정하기 위해'ListView_SetExtendedListViewStyle'을 호출하는 것을 기억 했습니까? 'ListView_SetCheckState'는'LVS_EX_CHECKBOXES'리스트 뷰에서만 작동하는 것으로 문서화되어 있습니다. –

답변

1

ListView_SetCheckState (hListOutput, iItem, TRUE);

목록에있는 값보다 1 큰 값을 가리 키기 때문에 오류가있는 것처럼 보입니다 (색인 된 이후).

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

ListView_SetCheckState(hListOutput,iItem1, TRUE); 
+0

체크 상태를 설정하기 전에 항목을 삽입하기 때문에 문제가되지 않습니다. 업데이트 된 코드를 참조하십시오. – Josh

+0

먼저 삽입이 성공했는지 확인하십시오. 그러나 제공된 코드가 작동하면 삽입 실패가 발생해야합니다. 다른 방법으로 알려주십시오. – perilbrain

+0

성공적으로 삽입되었습니다. 4 개의 항목을 삽입하고 4 개의 항목을 모두 삽입합니다. 나는 또한 반환 값을 확인하고 거기에 아무런 문제가 없었다. – Josh

0

이 iItem 같지 ListView_InsertItem의 반환 가치인가 시도? MSDN 문서는 항목 인덱스가 삽입 함수에서 반환되었음을 나타내므로 확인 상태를 설정할 때 해당 값을 사용하는 것이 가장 안전 할 수 있습니다.

관련 문제