|
임프님께서 알려주신 대로... 프로젝트 옵션의 링커에서 스택크기를 늘리니까 Stack Overflow가 발생하지 않습니다.
프로그램 알고리즘에 이상이 있는가 해서.. 점검을 해보았으나 이상이 없어 보이는듯 합니다..;;(제가 실력이 안되서 못 찾아 냈을수도. ㅡㅡ;;;;;)
이것때문에.. 시간 잡아먹은거 생각하면... 눈물이 앞을 가립니다..ㅠㅠㅠㅠ
암튼.. 답변 해주셔서 너무나 감사드립니다..
박지훈.임프 님이 쓰신 글 :
: 스택은 함수가 한번 호출될 때마다 사용되고 함수가 종료되면 돌려주므로, 따라서 함수 갯수가 많은 것도 당연히 Stack
: Overflow가 발생하고 안하고에 영향을 많이 줍니다. 그런데...
:
: C++빌더에서 스택의 기본 크기는 1메가바이트입니다.
: 이것은 프로젝트 옵션의 링커 페이지를 보시면 지정할 수 있게 되어 있습니다.
: 1메가바이트라는 양은 절대로 적은 양이 아닙니다. 보통 프로그램은 이 양의 몇십분의 일도 쓰지 않습니다.
: 함수가 한번 호출되는 데에 스택은 기본적으로 기껏해야 몇십 바이트밖에 사용되지 않습니다.
:
: 분명히 아셔야 할 것은, 보통은 Stack Overflow가 생긴다면 로직상에 문제가 있는 것입니다.
: 그리고 함수를 세개 호출하면 Stack Overflow가 발생하지 않고 네개 호출하면 발생한다면, 세개인 경우라도 데이터가
: 더 많이 들어오거나 해서 조건이 다른 경우가 되면 얼마든지 발생할 수 있다는 겁니다.
:
: 만약 확실히 더 복잡한 조건이 되지 않는다는 전제조건이 있다면, 위에서 말한 프로젝트 옵션의 링커 페이지에서 더 많이
: 늘려주거나, 혹은 재귀호출을 하는 함수 내에서 지역 변수를 최대한 적게 쓰거나 하는 방식으로 피해갈 수는 있습니다.
:
: 하지만 먼저 로직을 재점검하는 것이 최우선이라고 생각됩니다.
: Stack Overflow가 발생할 정도로 엄청나게 많은 횟수로 재귀호출이 일어난다면 로직이 좀 의심스럽습니다.
:
: 그럼...
:
:
: 이용태 님이 쓰신 글 :
: : 재귀호출을 해대고 있는데요...
: :
: : a재귀함수
: : {
: : 함수1
: : 함수2
: : 함수3
: : 함수4
: : }
: :
: : 이렇게 되어져 있습니다.
: :
: : 여기서 a 재귀함수에서 함수 4개를 포함시켜서 프로그램을 돌리면 Stack Overflow가 납니다
: :
: : 그런데.. 함수 3개로해서 프로그램 돌리면 Stack Overflow가 발생하지 않습니다.
: :
: : a 재귀함수는 조건이 맞을때까지.. 계속 실행이 되는데요.. 몇번실행되지는지는 정확히 모르겠구요.. 암튼 상당히 많이 실행이 됩니다.
: :
: : 이런 경우 어떻게 해결을 해야 합니까??
: :
: : 함수3개는 되고.. 함수4개는 안된다.. 조금 이상한 듯합니다..;;;
|