배열을 생성하면 아래와 같은 오류를 자주 보실텐데요.
<예시 코드>
#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
https://docs.microsoft.com/ko-kr/cpp/code-quality/c6201?view=vs-2019
https://docs.microsoft.com/ko-kr/cpp/code-quality/c6385?view=vs-2019
https://docs.microsoft.com/ko-kr/cpp/code-quality/c6386?view=vs-2019