数组的最大索引大小

时间:2009-10-11 05:50:17

标签: objective-c arrays

以下代码导致我的程序崩溃。我发现问题是数组的大小。如果我将尺寸减小到320 * 320,它可以正常工作。伤口是否有限制是否有意义?如果是这样,什么是解决方法?我正在使用Objective C for IPhone进行编码。任何帮助将不胜感激。

谢谢!

 int life_matrix[320*350];
 x_size=320;
 y_size=350;
 for (int counter=0; counter < x_size; counter++)
 {
  for (int counter2=0;counter2 < (y_size); counter2++)
  {
   life_matrix[counter*(int)x_size+counter2] = rand()%2;
  }
 }

2 个答案:

答案 0 :(得分:7)

数组在堆栈上分配,通常堆栈大小有限。如果你需要一个大数组,通常最好在堆上分配它。

答案 1 :(得分:3)

leiz's建议是正确的,你真的应该动态地分配它,否则你冒着遇到阵列大小大于堆栈可用内存的风险。

您用于将二维网格映射到一维数组的公式也是错误的。您应该乘以y_size而不是x_size。

life_matrix[counter*(int)y_size+counter2] = rand()%2;

或者你可以翻转你的计数器

life_matrix[counter2*(int)x_size+counter] = rand()%2;

解决此问题的另一种方法是将其用作初始化的一维数组:

for(int n = 0; n < x_size * y_size; ++n) {
    life_matrix[n] = rand()%2;
}