如何在递归算法中保护IOS免受EXC_BAD_ACCESS的影响

时间:2011-12-02 21:05:17

标签: ios recursion stack-overflow exc-bad-access

我正在尝试进行一些高度递归的模拟和数学运算,在某些边缘情况下,我会溢出调用堆栈并获得EXC_BAD_ACCESS信号。将算法更改为迭代形式是不可能的,因为它是许多遗留代码。并且递归深度限制没有用,因为内存的使用是不确定的。

有没有办法检测可用的堆栈数量,以便我可以优雅地取消操作?

是否有可能实现一种我可以连续检查的Stack Canary不被覆盖?

1 个答案:

答案 0 :(得分:0)

如果不关心线程安全性,请使用静态变量。像这样:

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

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

如果担心线程安全问题,可以将depth作为参数传递。