일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 프로그래밍
- Windows
- 배열
- Kotlin
- 리뷰
- 김성엽
- doit코틀린프로그래밍
- Javascript
- c
- tipssoft
- 지식나눔강좌
- 포인터
- CS
- c#
- Direct2D
- Win32
- 함수
- Visual Studio
- Desktop
- VS ERROR
- Tips강좌
- 백준
- 연산자
- 이지스퍼블리싱
- Tips프로그래밍강좌
- c++
- 문법
- 알고리즘
- Programming
- 티스토리
Archives
- Yesterday
- Today
- Total
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반응형
오랜만에 돌아온 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
반응형
'DEV > Tip' 카테고리의 다른 글
VS ERROR C6385: var에서 잘못된 데이터를 읽고 있습니다. 읽기 가능한 크기는 'var*4'바이트인데 실제로는 n바이트만 읽을 수 있습니다. (0) | 2021.06.26 |
---|---|
pragma disable vs pragma suppress (0) | 2021.03.24 |
[goorm]Kotlin Error: *.jar에 기본 Manifest 속성이 없습니다. (0) | 2020.04.01 |
프로그램에 일상을 더하다: Intro (2) | 2020.03.17 |
프로젝트에서 개발하는 프로그램이 32비트인지 확인하는 방법 (3) | 2019.06.17 |
Comments