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

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

DEV/Tip

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

F.R.I.D.A.Y. 2021. 6. 26. 05:41
반응형

 메모리 관련 작업을 하면 주로 보이는 C6385


발생 재현

 C6385 경고는  주로 메모리 할당 관련 작업을 할 때 일어납니다. MS 공식 문서의 내용을 보면 접근이 허용된 메모리 공간을 벗어난 경우에 이런 경고를 띄우는 것으로 안내하고 있습니다.

int arr[10];
int i = 0;
while(i <= 10) arr[i] = i;

 위 코드는 arr[10]까지 접근을 하므로 문제의 소지가 있습니다. 때문에 컴파일러가 다시 고치라고 안내하는 것이죠.

 

 배열을 사용하는 경우라면 정상적으로 안내가 되는데 반해, 아래와 같이 포인터 문법을 사용한 경우 범위를 맞게 작성했음에도 불구하고 경고가 계속해서 발생하는 경우가 있습니다.

int *arr;
arr = new int[10];
int i = 0;
while(i < 10) arr[i] = i;

delete[] arr;

  위 코드는 Visual Studio[# Microsoft Visual Studio Community 2019 버전 16.10.2]에서 검사해도 문제가 없다고 나옵니다. 그러나, 이차원 이상을 구현하는 경우에 특히 경고가 날뜁니다.

 

 

원인

 해당 경고는 인텔리센스 오류입니다. 만일 본인이 작성한 코드가 정상적으로 동작한다고 생각이 된다면 무시해도 되는 경고입니다.

 

 해당 경고는 주로 발생하는 다차원 포인터로 메모리를 동적할당, 관리하는 코드에서는 인텔리센스가 동적할당받은 범위를 코드상에서 제대로 분석하지 못해 발생하는 문제입니다.

 

 

경고 해제

 

 경고 해제는 다음 포스트를 참고하세요.

 

pragma disable vs pragma suppress

 경고 예외 처리를 위해 코드상에 #pragma warning() 시리즈를 작성할 때가 있습니다. 괄호 안에 disable과 suppress가 들어갈 수 있는데, 두 경우는 어떤 경우에 사용되는지 알아보겠습니다. #pragma?  컴

pang2h.tistory.com

 

# index

728x90
반응형
Comments