访问大型本地数组时为EXC_BAD_ACCESS

时间:2019-01-31 12:59:09

标签: objective-c iphone

我对最近未触及过的代码崩溃感到困惑,它在以前曾奏效。 (在过去两周的测试中没有调用它,而我在项目的其他部分工作。)我将其范围缩小到下面的代码。

我正在创建一个本地数组来对高度图执行一些操作。即使代码很简单,我也无法解释为什么它会崩溃。我能看到的唯一问题是数组的大小,但我也使用了更大的数据结构,并且以前效果很好。

现在,它在模拟器和iPhone中崩溃。崩溃总是在我达到124时发生。我可以将代码从下面放在我的项目中的任何地方,当它崩溃时,它的值始终相同。

{
    const int tsize=512;
    double h[tsize][tsize]; //height map
    h[500][500]=1.0f;
    h[250][1]=1.0f; // working fine
    for(int i=0;i<tsize;i+=1){
        h[i][1]=0.0f;   // always crashing at i=124

    }
}
  

EXC_BAD_ACCESS(代码= 2,地址= 0x70000763e258)

  • 我当然试图清理构建文件夹。
  • 我还尝试使用malloc创建数组并使用指针对其进行访问,但这会导致相同的崩溃。

当我使用tsize值并将其增大一点时,当调用包含此代码的方法时,崩溃已经发生。

1 个答案:

答案 0 :(得分:2)

您很有可能超出了最大堆栈大小,并且在这种情况下,行为在很大程度上是不确定的,并会导致奇怪的崩溃。

顺便说一下,主线程的堆栈大小大于辅助线程的大小。

通常,您绝不应该在堆栈上使用大量内存。 512 * 512 * sizeof(double)是要从堆栈中拉出的巨大内存!