2010-11-22 2 views
0

IntellitracTCPIP.exe의 0x523d14cf (msvcr100d.dll)에서 처리되지 않은 예외 : 0xC0000005 : 0x00000008 위치에서 읽는 액세스 위반입니다.0x523d14cf (msvcr100d.dll)에서 처리되지 않은 예외가 발생 했습니까?

이 오류의 원인은 무엇입니까? 그리고 그것을 해결하는 방법

+1

정보가 충분하지 않아 테스트 케이스를 제공 할 수 있습니까? – OmnipotentEntity

+1

아니면 스택 추적? – wj32

+1

또는 문제를 재현하는 최소한의 코드 스 니펫? –

답변

0
0xC0000005: Access violation reading location 0x00000008. 

이것은 나쁜 포인터를 나타냅니다. 포인터는 0x00000008과 같은 낮은 주소를 가리 키지 않습니다. 이것에 대한 충분한 정보를 얻지 못했다면 디버거에서 프로그램을 실행 해보십시오.

4

당신이 읽으려고하는 주소는 4 바이트 정수로 구성된 구조체를 가지고 있음을 암시합니다. 해당 구조체 유형에 대한 포인터가 있지만 그 포인터는 null입니다. 프로그램에서 세 번째 정수 필드의 오프셋을 읽으려고합니다. 널 포인터 주소 0에이를 추가하면 0x00000008이됩니다. (더 작거나 큰 유형의 구조체 또는 배열 일 수도 있지만 내 경험에 의하면 4 바이트 정수가 가장 가능성이 높음을 알 수 있습니다.)

오류 메시지는 공격 코드 줄이 msvcr100d.dll에 속해 있다는 것을 나타냅니다 . 그건 당신의 코드가 아닙니다. 당신은 아마도 C 런타임 함수에 널 포인터를 전달했을 것입니다. 이 함수는 유효한 포인터를 제공하고 구조체의 세 번째 필드를 읽으려고했지만 해당 포인터가 유효하지 않기 때문에 OS가 읽기 시도를 가로 채고 대신 예외를 던졌습니다.

오류가 발생하기 전에 프로그램에서 마지막 코드 줄을 찾습니다. 이를 수행하기 위해 콜 스택을 사용하여 프로그램이 충돌 한 지점까지 도달 한 함수 호출 체인을 확인할 수 있습니다. 귀하의 기능 중 하나를 찾을 때까지 목록을 아래로 이동하십시오. 포인터가 보이니? 당신이 그 기능을 호출 할 때 그것들이 모두 유효하다는 것을 보장 할 수 있습니까? 그렇지 않다면, 당신은 그 기능을 호출하기로되어 있습니까? 포인터가 유효한지 확인하거나 null 포인터로 함수를 호출하지 마십시오.

관련 문제