以下代码导致我的程序崩溃。我发现问题是数组的大小。如果我将尺寸减小到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;
}
}
答案 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;
}