目标C - EXC_BAD_ACCESS

时间:2013-12-04 15:39:48

标签: objective-c recursion exc-bad-access

我的程序使用递归。我无法向你展示代码,因为它很庞大。

如果我长时间使用递归,我会得到这个

EXC_BAD_ACCESS (code=2, address = 0xb03b1fcc)

当我尝试使用此错误打印对象时,我得到了

EXC_BAD_ACCESS (code=2, address = 0xb03b1fcc). The process has been returned to the state before expression evaluation.

这是什么意思?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

  

我的程序使用递归。我无法向你展示代码,因为它很庞大。

那就在那里,很可能是你问题的根源。具体来说,你已经溢出了堆栈(即在堆栈中过多的垃圾递归得太深了。)

通常,在大多数基于C的系统上应避免深度递归,因为堆栈深度通常是有限的。

你应该考虑重构而不是使用递归。

答案 1 :(得分:1)

这意味着您正在尝试访问地址0xb03b1fcc的内存,但无权这样做。通常这是内存分配/对象引用的问题,但是如果你说它只在你进行深度递归时发生,那可能只是你有一个堆栈溢出(试图访问堆栈上的内存超出它的极限)。

调试器应该指向导致错误内存访问的确切指令,但是如果问题确实是递归,则只需要使用更少的堆栈内存和/或减少递归深度。