반응형

 

배열을 생성하면 아래와 같은 오류를 자주 보실텐데요. 

<예시 코드>

#include<stdio.h>
#define max 10

int arr[5] = {1,2,3,4,5};
int arr1[max];

int main(void)
{		
	for (int i = 0; i <= 5; i++)
	{
		printf("%d", arr[i]);
	}
	printf("%d\n", arr[5]);
	arr1[max] = 3;
}


<경고 C6385>

'arr'에서 잘못된 데이터를 읽고 있습니다.  읽기 가능한 크기는 '20'바이트인데 실제로는 '24'바이트만 읽을 수 있습니다.

<경고 C6386>

'arr1'에 쓰는 동안 버퍼 오버런이 발생했습니다.  쓰기 가능한 크기는 '40'바이트인데 실제로는 '44'바이트만 쓸 수 있습니다. 

 

int arr[5] 의 경우, 배열의 갯수는 5개이고 인덱스는 0부터4 까지 입니다. 즉 위의 코드에서는 i 는 0 부터 5까지 반복문을 돌아 마지막에 arr[5] 값을 출력하려고 하여 C6385오류가 발생하였습니다.

int arr1[max] 의 경우, 배열의 갯수는 max개 이고 인덱스는 0부터 max-1까지 입니다. 즉 arr1[max]가 존재하지않는데 그곳에 3을 저장하려고 하여 버퍼 오버런이 생겨 C6386오류가 발생하였습니다.

 

오류가 발생한 코드에서 배열의 인덱스를 잘못참조하였는지, 유효한 범위를 벗어났는지 다시 확인하면 쉽게 해결할 수 있는 문제인것같습니다.

 

 

 

<관련오류 - C6200, C6201, C6385, C6386> 출처

https://docs.microsoft.com/ko-kr/cpp/code-quality/c6200?view=vs-2019

 

C6200

C6200C6200 이 문서의 내용 --> 경고 C6200: 인덱스 <이름 >은 (는) 비 스택 버퍼 <변수에 대 한 유효한 인덱스 범위 에서 max > is out of valid index range to for non-stack buffer 이 경고는 지정 된 배열에 대 한 정��

docs.microsoft.com

https://docs.microsoft.com/ko-kr/cpp/code-quality/c6201?view=vs-2019

 

C6201

C6201C6201 이 문서의 내용 --> 경고 C6201: 스택이 할당 될 수 있는 <변수 >에 대 한 버퍼 오버런이 발생 했습니다. 인덱스 <이름 >는 유효한 인덱스 범위 <최대 > <>warning C6201: buffer overrun for , which is possi

docs.microsoft.com

https://docs.microsoft.com/ko-kr/cpp/code-quality/c6385?view=vs-2019

 

C6385

코드 C++ 분석 경고 C6385 및 해결 방법에 대해 설명 합니다.

docs.microsoft.com

https://docs.microsoft.com/ko-kr/cpp/code-quality/c6386?view=vs-2019

 

C6386

C6386C6386 이 문서의 내용 --> 경고 C6386: 버퍼 오버런: <버퍼 이름 >에 액세스 합니다. 쓰기 가능한 크기는 <> 바이트 이지만 바이트는 쓸 수 있습니다. 줄: x, ywarning C6386: buffer overrun: accessing , the writable size is bytes, but bytes may be written: Lines: x, y 이 경고는 지정 된 버퍼의 쓰기 가능한 범위가 쓰기에 사용 되는 인덱스 보다

docs.microsoft.com

 

반응형

+ Recent posts