2011-12-02 4 views
4

매우 반복적 인 일부 시뮬레이션 및 연산을 수행하려고하는데 일부 가장자리의 경우 호출 스택을 오버플로하고 EXC_BAD_ACCESS 신호를받습니다. 레거시 코드가 많기 때문에 알고리즘을 반복적 인 형식으로 변경하는 것은 바람직하지 않습니다. 재귀 깊이 제한은 메모리 사용이 비 결정적이기 때문에 유용하지 않습니다.재귀 알고리즘에서 EXC_BAD_ACCESS에서 IOS를 보호하는 방법

정상적으로 작동을 취소 할 수 있도록 사용 가능한 스택의 양을 감지하는 방법이 있습니까?

지속적으로 확인할 수있는 Stack Canary 유형을 구현할 수 있습니까?

+0

당신은 이것을 알아 냈습니까? 동일한 문제가 있고 그것을 해결할 생각이 없기 때문입니다. – Levi

답변

0

스레드 안전성이 중요하지 않은 경우 정적 변수를 사용하십시오. 이런 식으로 뭔가 : 스레드 안전 우려가

int recurse(int something) { 
    static int depth = 0; 
    ++depth; 
    if (depth > MAX_DEPTH) { // bail } 

    ... 
    int result = recurse(...); 
    --depth; 
    return result; 
} 

경우, 매개 변수로 depth을 전달할 수 있습니다.

관련 문제