본문 바로가기

프로그래밍 -----------------------/C,C++ 팁

MFC에서 Stack Overflow 해결법



내가 만든 프로그램이 친절한 MFC에 의해서 자동으로 꺼져버린 것인지 알고,

알고보니 너무 많은 재귀적 호출로 인한 Stack Overflow 문제였다..

 

해결법은, 

double array[max];  처럼 배열들을 스택을 사용하게 만들지 말고,

malloc이나 new를 사용해서 heap공간을 사용하도록 만들던가...

 

아니면 지금 내가 소개하려는 것 처럼...

MFC의 Project setting을 바꾸어줘서 스택의 공간을 늘리는 방법이 있다.

 

나의 경우는 배열의 크기가 너무 크다기 보다 너무 많은 재귀적 호출에 의한 Stack Overflow이므로

두번째 방법을 사용했다. (사실은..코드 뜯어 고치기도 귀찮고 두번째 방법이 아주 간단하기 때문이다..;;)

 

방법은, 

메뉴의 'Project' -> 'Settings' -> 'link' 탭에서  'Project Options'에 보면  

 /stack:100000    이런 것이 있을 것이다. 이 크기를 올려주면 된다.  

없으면 위에 'Object/library Modules'칸에  /stack:50000000   이런식으로 추가해주면 된다. 


정말 간단하다. 

나의 경우는 스택크기를 50메가로 잡아주었는데도 Stack Overflow가 발생했다..ㅡ0ㅡ

아, 기본적으로 MFC의 스택크기는 1메가로 잡혀있다. 

실행이 오래걸리는 프로그램을 만드실 때 갑자기 종료되는 경우가 생길시 스택 오버플로우를 의심해보세요..

도움이 되었으면 좋겠습니다. ^^