배열을 생성하면 아래와 같은 오류를 자주 보실텐데요.
<예시 코드>
#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