2011-12-02 26 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渡すことができます。

関連する問題