2011-12-02 3 views
4

J'essaye de faire quelques simulations et opérations mathématiques qui sont hautement récursives et dans certains cas de bord je déborde la pile d'appel et obtiens un signal EXC_BAD_ACCESS. Il est impossible de changer les algorithmes en forme itérative car il s'agit d'un code hérité. Et une limite de profondeur de récursivité ne serait pas utile car l'utilisation de la mémoire est non déterministe.Comment protéger dans IOS de EXC_BAD_ACCESS dans l'algorithme récursif

Y at-il un moyen de détecter la quantité de pile disponible afin que je puisse annuler l'opération gracieusement?

Est-il possible de mettre en œuvre un type de Canary Stack que je peux vérifier en permanence n'est pas remplacé?

+0

L'avez-vous déjà compris, parce que j'ai le même problème et je ne sais pas comment le résoudre – Levi

Répondre

0

Si la sécurité du thread n'est pas un problème, utilisez une variable statique. Quelque chose comme ceci:

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

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

Si thread-sécurité est une préoccupation, vous pouvez passer depth comme paramètre.

Questions connexes