본문 바로가기
C++

[C++ Error] Stack around the variable 'address' was corrputed

by Kimpeep 2021. 9. 15.

실행 코드
디버그 에러 창

시작하기에 앞서

char address[a]

cin.getline(address, b, '\n')

배열 정의 시 필요한 배열의 크기를 a로, getline 함수 실행 시 buf[]에 지정할 배열의 크기. int size를 b로 정의하였다.


에러 상황

실습을 하던 도중, getline() 함수에 대한 의문이 생겼다. 기존 코드였던 char address[100]; cin getline(address, 100, '\0')에서 a와 b 값을 변경하며 실습을 진행하였고 a 값이 1, b 값이 100일 때 위와 같은 디버그 에러 창이 떴다.


문제 탐구

a와 b의 크기를 여러 방면으로 변경하여 코드를 실행시켰다. a가 5, b가 10일 때도 동일한 오류가 발생하였고, a가 10, b가 10일 때부터는 발생하지 않았다.

위 상황으로 보았을 때 a의 크기가 b보다 크거나 작아야 내가 작성한 코드가 정상적으로 출력될 수 있다는 것을 깨달았다.


문제 해결

배열의 크기를 getline 함수에서 지정해 줄 배열의 크기보다 크거나 같게 할 경우 오류가 발생하지 않는다.

해결된 코드. a = 100, b= 5일 때 역시 오류가 발생하지 않는 것을 알 수 있다.
콘솔 창

콘솔 창에서 확인할 수 있다시피, 배열의 크기가 몇이든 getline 함수에서 지정한 크기-1만큼만 출력되는 것을 확인할 수 있다.

'C++' 카테고리의 다른 글

[명품 C++ programming] Chapter 02 Open Challenge  (0) 2021.09.16

댓글