2013-03-25 4 views
1

그래서 나는 다중 스레드 C++ 프로그램을 만드는 오전과이 오류를 반환 그런데Visual Studio에서 오류 메시지 다음에 오는 메시지는 무엇을 의미합니까?

Unhandled exception at 0x77e915de in HANASimulationSync.exe: 0xC0000005: Access violation reading location 0x00000020.

, 나는 그것이 오류를 반환하지 않는 단일 스레드에서이 코드를 실행하면. 나는 이것이 어떤 종류의 오류인지 알고 싶습니다. 메모리 관리와 관련이 있습니까?

+5

아니요 게시판 코드 –

+3

@TonyTheLion "이게 어떤 종류의 오류인지 알고 싶습니다." –

+0

그것은 런타임 오류로, 일반적으로 "충돌"이라고합니다. 디버거에서 프로그램을 실행하면됩니다. 충돌이 발생하면 디버거가 중지되고 변수를 검사하고 함수 호출 스택을 볼 수 있습니다. 표시된 코드가 귀하의 코드가 아니라면 코드에 올 때까지 호출 스택에 올라서십시오. –

답변

13

잘못된 메모리 위치에서 읽으려고했습니다. 이 경우 위치는 0x00000020입니다. 그것은 0보다 약간 작은 오프셋이므로 null 포인터에서 오프셋을 참조 해제하는 것 같습니다.

이렇게하면 오프셋 된 0x20에 멤버가있는 구조체가있는 것이 일반적입니다. 그리고 포인터가 null 인 구조체의 포인터에서 해당 멤버를 읽으려고하면. 그리고 널 포인터를 사용하여 배열에 동일한 오류 색인을 생성하게됩니다. 나는 당신이 지금 생각을했다고 생각합니다.

기타 관련 정보는 오류를 유발 한 코드 주소입니다. 귀하의 예에서는 0x77e915de입니다. 전체 이미지 맵을 생성하도록 링커를 구성하면 오류의 원인이되는 코드 행을 식별 할 수 있습니다. 심지어 디버그 정보를 생성하면 디버거를 연결할 수 있습니다.

일반적으로이 종류의 오류는 segmentation fault 또는 액세스 위반 또는 보호 오류로 알려져 있습니다. 그 용어는 모두 같은 것을 의미합니다.

관련 문제