F.R.I.D.A.Y.

VS ERROR C6385 : 'variable'에서 잘못된 데이터를 읽고 있습니다. 읽기 가능한 크기는 'n1'바이트인데 실제 크기는 'n2'바이트만 읽을 수 있습니다. 본문

DEV/Tip

VS ERROR C6385 : 'variable'에서 잘못된 데이터를 읽고 있습니다. 읽기 가능한 크기는 'n1'바이트인데 실제 크기는 'n2'바이트만 읽을 수 있습니다.

F.R.I.D.A.Y. 2021. 3. 6. 21:25
반응형

C6385 경고

 오랜만에 돌아온 VS ERROR 시리즈입니다. 이번 시간에는 C6385 경고를 살펴봅니다.


문제 코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	int arr[5] = { 0, };

	for (int i = 0; i < 5; ++i) {
		scanf("%d", arr + i);
		arr[5] += arr[i]; // 오류 발생 위치
	}

	return 0;
}

 

원인. 접근 가능한 메모리 이탈

 위 코드에서 접근 가능한 메모리 인덱스는 0부터 4입니다. 그런데 경고가 발생하는 위치에서는 인덱스를 5로 사용하고 있습니다. 따라서 범위를 수정해주면 정상적으로 경고가 사라집니다.

 

 C6201 경고가 함께 발생하는 것을 보니 일차원 배열에 대해서는 스택 범위까지 VS 인텔리센스에서 잡아서 알려줍니다.

 만일 2차원 이상의 배열인 경우에는 위 C6201 경고는 발생하지 않고 C6385 경고만 발생하니 이점 참고하세요 :)

 

해결. 범위 수정

 배열에 접근 가능 인덱스는 0 - 4 이므로 인덱스 5에 접근하는 코드를 접근 가능 인덱스로 수정해주면 됩니다. 예제 코드를 수정한 것으로는 인덱스 4에 접근하도록 하고 반복은 4번만 하도록 수정한 상태입니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	int arr[5] = { 0, };

	for (int i = 0; i < 4; ++i) { // i의 범위를 0-3으로 수정했음
		scanf("%d", arr + i);
		arr[4] += arr[i]; // arr[5] -> arr[4] 로 수정함
	}

	return 0;
}
728x90
반응형
Comments