2011-12-10 2 views
-4

BufferOut을 16 요소 배열로 정의했습니다.변수 주위에 스택이 손상되었습니다. 왜 이런 일이 생길까요?

하지만 디버깅하는 동안이 메시지가 나타납니다.

Run-Time Check Failure #2 - Stack around the variable 'BufferOut' was corrupted.

HIDBufferOutBufferOut는 16 엘리먼트 버퍼가

HIDBufferOut BufferOut; // first element is the report ID 
    BufferOut[0] = 0; 
    BufferOut[1] = 211; 
    BufferOut[16] = 44; 
    BufferOut[4] = 4; 

    . 
    . 
    . 
    . 
    etc 
+2

오류 메시지는 설명이 충분합니다. 알아낼 수 없다면 소스 코드를 보지 않고서도 그럴 수 없습니다. – ybungalobill

+0

'HIDBufferOut BufferOut; \t \t \t \t // 첫 번째 요소는 보고서 ID이다 \t \t BufferOut [0] = 0; \t \t BufferOut [1] = Marker(); \t \t BufferOut [16] = (int) 44; \t \t BufferOut [4] = typ; –

+3

배열에 17 번째 요소를 삽입 했으므로 –

답변

2

경우 char 어레이의 16 원소, 다음 유효 인덱스는 0, ..., 15이 의미하는 것을 :

BufferOut[16] = (int) 44; 

은 배열 범위를 벗어나서 메모리 손상을 일으 킵니다.

+0

나는 17 개의 요소로 정의하려고했지만 여전히 같은 문제가 있습니다 –

+1

어디에서 배열을 만드나요? 위의 코드에서 볼 수 없습니다. – Bart

+2

@ user1091216 : 그렇다면 충분한 정보를 제공하지 못했습니다. – ybungalobill

0

당신이 당신의 손이 닿지 않는 원인이 버퍼 오버 플로우 넘어 위치에 쓰고, 코드의이 작품에서 명확 스택 손상 때이 일반적으로 발생 : BufferOut [16] = (int) 44; // 17 번 위치에서 경계를 작성하고 있습니다.

+0

배열 크기를 17 개 요소로 변경하십시오. 여전히 유지되면 깨끗한 상태로 프로젝트를 처음부터 새로 빌드하는 것이 도움이됩니다. –

관련 문제