如何在IOS中防止递归算法中的EXC_BAD_访问

如何在IOS中防止递归算法中的EXC_BAD_访问,ios,recursion,stack-overflow,exc-bad-access,Ios,Recursion,Stack Overflow,Exc Bad Access,我试图做一些模拟和数学运算,这些运算是高度递归的,在一些边缘情况下,我会溢出调用堆栈,并得到EXC_BAD_访问信号。将算法更改为迭代形式是不可行的,因为这是大量遗留代码。递归深度限制也没有用,因为内存的使用是不确定的 有没有办法检测可用堆栈的数量,以便我可以优雅地取消操作 是否可以实现一种我可以不断检查是否未被覆盖的堆栈金丝雀 如果不关心线程安全,请使用静态变量。大概是这样的: int recurse(int something) { static int depth = 0; ++d

我试图做一些模拟和数学运算,这些运算是高度递归的,在一些边缘情况下,我会溢出调用堆栈,并得到EXC_BAD_访问信号。将算法更改为迭代形式是不可行的,因为这是大量遗留代码。递归深度限制也没有用,因为内存的使用是不确定的

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


是否可以实现一种我可以不断检查是否未被覆盖的堆栈金丝雀

如果不关心线程安全,请使用静态变量。大概是这样的:

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

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

如果线程安全是一个问题,您可以将
深度
作为一个参数传递。

您已经解决了这个问题,因为我也有同样的问题,不知道如何解决它