Objective c 数组的最大索引大小

Objective c 数组的最大索引大小,objective-c,arrays,Objective C,Arrays,以下代码正在使我的程序崩溃。我发现问题在于数组的大小。如果我将大小减小到320*320,它就可以正常工作。这伤口是一种限制有意义吗?如果是,什么是工作环境?我正在用Objective C为IPhone编写代码。任何帮助都将不胜感激 谢谢 int life_matrix[320*350]; x_size=320; y_size=350; for (int counter=0; counter < x_size; counter++) { for (int counter2=0;

以下代码正在使我的程序崩溃。我发现问题在于数组的大小。如果我将大小减小到320*320,它就可以正常工作。这伤口是一种限制有意义吗?如果是,什么是工作环境?我正在用Objective C为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;
  }
 }

数组是在堆栈上分配的,通常堆栈大小是有限的。如果您需要一个大数组,通常在堆上分配它是一个好主意。

数组在堆栈上分配,并且通常堆栈大小是有限的。如果您需要一个大数组,通常在堆上分配它是一个好主意。

建议是正确的,您确实应该动态地分配它,否则您可能会遇到数组大小大于堆栈上可用内存的情况

此外,用于将二维栅格映射到一维阵列的公式不正确。您应该乘以y_大小,而不是x_大小

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;
}
建议是正确的,您确实应该动态地分配它,否则您可能会遇到数组大小大于堆栈上可用内存的情况

此外,用于将二维栅格映射到一维阵列的公式不正确。您应该乘以y_大小,而不是x_大小

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;
}

谢谢,我认为C++可以用“新建”构造函数来完成。但你们知道如何在目标C中做到这一点吗?你们可以使用旧的C malloc,或者我想使用std::vector。对不起,我不太熟悉Objo C。你可以在Objy-C中使用MalC/C免费进行动态内存管理。谢谢,我认为C++可以用“新建”的构造函数来完成。但你们知道如何在目标C中做到这一点吗?你们可以使用旧的C malloc,或者我想使用std::vector。抱歉,我不太了解Objective C。您可以在Objective-C中使用malloc/free进行动态内存管理。