본문 바로가기

운동하는 개발자/c++

Visual studio Stack overflow (Stack Reserve Size)

728x90

타 팀의 요구하상으로 간단한 툴을 만들어서 전달해 주려는데 특정 함수 진입 시 Stack overflow가 나면서 프로그램이 종료되었다.

그동안 경험에 의해서는 보통 호출하는 쪽에서 정리안된 메모리가 충돌한다던가 하는 문제였었기에 호출하는 쪽만 죽어라 찾아봤는데 아무리 봐도 원인을 찾을 수 없었다.

그래서 혹시나 싶어 호출 되는 함수에서 특정 기능들을 하나씩 지워가며 테스트해본 결과 char 배열의 선언을 지우니 정상작동했다.

??????????

GPT에서도 해당 코드는 문제가 없다고 하는데..

찾아보니 visual studio에서 제공하는 stack의 크기는 디폴트로 1MB였던것이다 
아래 예시코드처럼 작성하게되면 해당 에러가 발생하게 된다

이 설정은 프로젝트 옵션에서 Linker-> All Options에 Stack Reserve Size라는 곳에서 변경이 가능하다.

처음엔 저 단순 배열 선언부 때문에 에러가 발생했을 거라고 생각 못해서 시간을 제법 소모했고 다음으론 메모리가 10GB 정도 남는데 스택이 오버플로우 날 수 있나..?라는 생각에 원인 파악이 늦었다..

꼭 저런 식으로 배열 선언이 필요하다면 

char *arr = new arr[1048576]

위와 같이 동적할당으로 heap 메모리에 할당하여 사용하여야 한다.

 

끝...


 

728x90