我正在尝试创建一个二维数组,该数组随机分配给每个坐标1或0。它工作得很好,直到它到达坐标[20] [3]。之后它就抛弃了#34;分段故障11"。
我绝对不知道如何或为何。特别是因为我可以创建一个200 * 200的矩阵,但它仍然只在坐标[200] [3]处得到相同的问题。所以它总是在最后一个x坐标中出现错误的第三个y坐标。
#include <stdio.h>
#include <stdlib.h>
int main() {
int x, y, i, j ;
x = 20;
y = 20;
int grid [x][y];
for ( i = 0; i <= x; i++) {
for ( j = 0; j <= y; j++) {
grid[i][j] = rand() % 2 ;
printf("grid [%d][%d]: %d\n", i, j, grid[i][j]);
}
}
return 0;
}
答案 0 :(得分:2)
您正在运行数组的 bounds 。这是C中的未定义行为,并且表现为崩溃。
将i <= x
更改为i < x
等,或者增加网格尺寸。
答案 1 :(得分:2)
C对数组使用基于0的索引。因此,对于定义为
的数组int grid [x][y]
循环
for ( i = 0; i <= x; i++)
for ( j = 0; j <= y; j++)
如果off-by-one。 (注意<=
部分)。
详细说明,对于维度p
的数组,有效索引为0
到p-1
,包括i < x
。
您应该将循环条件更改为j < y
和int main()
以保持边界。访问超出范围的内存会导致undefined behavior。
那就是说,
int main(void)
至少应为grid
,以符合托管环境的C标准。#define
作为VLA。如果已知维度,则更好的方法是使用编译时常量(ValueAnimator mValueAnimator = new ValueAnimator();
)来生成数组维度。