컴파일 하고 빌드하는데 문제가 없었는데.. 실행시키니까 stack overflow란 메시지창을 본 사람은 여길 보기 바란다.


stack overflow란 쉽게 말하자면 stack이 넘쳐났다는 뜻인데.. 달리 얘기하자면 stack 에 제한이 있다는 얘기다.
위와같은 에러 메시지를 보려면 우선 실험을 해 보자.

간단한 다이알로그 프로그램을 만들어 두고 다이알로그 클래스 헤더파일 안에 다음과 같이 선언 해 본다.

UINT a[160000];

일단 빌드하고 실행.. 문제 없지? 그럼 일케 해보자.

UINT a[360000];

엥? 왠 스택 오버플로우?

이유를 말해주까? 기본적으로 정적 stack size는 1 Megabyte로 고정되어 있기 때문이다.
위를 계산해 보믄 UINT는 4바이트.. 즉 160000 * 4 = 640000 = 대략 640k. 360000 * 4 = 1280000 = 대략 1.2메가
이렇게 해서 스택 사이즈를 넘겨버리기 때문이다.

보통 네이년 지식즐에 보면 malloc을 하라는 답변이 많은데.. 다른 해결방법을 하나 알려주도록 한다.


해결법 1
네이년 지식즐의 malloc이든 new이든 동적으로 메모리를 할당해서 쓰면 아무런 문제가 없다. 대신 프로그램 죽을 때 꼭 지워주도록.

해결법 2
VC 6.0 기준으로 여길 보자.


프로젝트 세팅 화면인데.. 이중에 LINK 탭의 Reserve를 유심히 봐주기 바란다.
위의 얘기가 뭐냐면, 정적 스택 사이즈를 10 Megabytes로 늘려주세요.. 라는 곳이다.

근데 A00000 값이 뭐냐고?
1024 * 1024 * 10의 값을 헥사로 바꾸면 저게 된다. 의심가면 본인이 직접 해 보도록 할 것.

이후 OK를 누르고 닫으면 이후 이 프로젝트 스택 사이즈의 제한은 10메가로 상향 조정된다.
너무 크게한다고 좋은건 없으니 대충 이정도로 늘려놓고 필요한 메모리는 그때그때 할당 받아서 쓰는게 깔끔하다.

그럼 다들 수고~
Posted by hopi
,