在C中使用2D阵列进行简单I/O时,可变值发生变化,导致分割错误



首先,请原谅,我是初学者。我只是想得到一个正方形的维数n,并用值1到n^2填充一个2D数组。这是我编码的:

#include <stdio.h>
int main() {
int dimension = 0;
printf("Enter the size: ");
scanf("%d", &dimension);
int square[dimension][dimension];
int count = 1;
int i, j;
printf("n%d dimension", dimension);
for(i = 0; i < dimension; i++){
for(j = 0; i < dimension; j++){
square[i][j] = count;
count++;
}
}
printf("n%d dimensionn", dimension);
for(int i = 0; i < dimension; i++) {
for(int j = 0; j < dimension; j++)
printf("%d ",square[i][j]);
printf("n");
}
return 0;
}

对于3的输入,我得到以下输出:

Enter the size: 
3 dimension
31 dimension
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 34 34 33 
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 34 34 33 2 29 2 
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 34 34 33 3 26 2 0 2 0 
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 34 34 33 4 23 2 0 2 0 -372176384 32765 1443246592 
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 34 34 33 5 20 2 0 2 0 -372176384 32765 1443246592 1101415723 1552312736 32550 
19 20 21 22 23 24 25 26 27 28 29 30 31 34 34 33 6 17 2 0 2 0 -372176384 32765 1443246592 1101415723 1552312736 32550 0 0 4195664 
22 23 24 25 26 27 28 29 30 31 34 34 33 7 14 2 0 2 0 -372176384 32765 1443246592 1101415723 1552312736 32550 0 0 4195664 0 -372175936 32765 
25 26 27 28 29 30 31 34 34 33 8 11 2 0 2 0 -372176384 32765 1443246592 1101415723 1552312736 32550 0 0 4195664 0 -372175936 32765 0 0 0 
28 29 30 31 34 34 33 9 8 2 0 2 0 -372176384 32765 1443246592 1101415723 1552312736 32550 0 0 4195664 0 -372175936 32765 0 0 0 0 4196560 0 
31 34 34 33 10 5 2 0 2 0 -372176384 32765 1443246592 1101415723 1552312736 32550 0 0 4195664 0 -372175936 32765 0 0 0 0 4196560 0 1548250007 32550 1 
33 11 2 2 0 2 0 -372176384 32765 1443246592 1101415723 1552312736 32550 0 0 4195664 0 -372175936 32765 0 0 0 0 4196560 0 1548250007 32550 1 0 -372175928 32765 
2 0 2 0 -372176384 32765 1443246592 1101415723 1552312736 32550 0 0 4195664 0 -372175936 32765 0 0 0 0 4196560 0 1548250007 32550 1 0 -372175928 32765 32768 1 4195910 
0 -372176384 32765 1443246592 1101415723 1552312736 32550 0 0 4195664 0 -372175936 32765 0 0 0 0 4196560 0 1548250007 32550 1 0 -372175928 32765 32768 1 4195910 0 0 0 
1443246592 1101415723 1552312736 32550 0 0 4195664 0 -372175936 32765 0 0 0 0 4196560 0 1548250007 32550 1 0 -372175928 32765 32768 1 4195910 0 0 0 1229117345 230489935 4195664 
32550 0 0 4195664 0 -372175936 32765 0 0 0 0 4196560 0 1548250007 32550 1 0 -372175928 32765 32768 1 4195910 0 0 0 1229117345 230489935 4195664 0 -372175936 32765 
4195664 0 -372175936 32765 0 0 0 0 4196560 0 1548250007 32550 1 0 -372175928 32765 32768 1 4195910 0 0 0 1229117345 230489935 4195664 0 -372175936 32765 0 0 0 
32765 0 0 0 0 4196560 0 1548250007 32550 1 0 -372175928 32765 32768 1 4195910 0 0 0 1229117345 230489935 4195664 0 -372175936 32765 0 0 0 0 1292031905 -230216595 
0 0 4196560 0 1548250007 32550 1 0 -372175928 32765 32768 1 4195910 0 0 0 1229117345 230489935 4195664 0 -372175936 32765 0 0 0 0 1292031905 -230216595 -1904420959 -202356897 0 
0 1548250007 32550 1 0 -372175928 32765 32768 1 4195910 0 0 0 1229117345 230489935 4195664 0 -372175936 32765 0 0 0 0 1292031905 -230216595 -1904420959 -202356897 0 32765 0 0 
1 0 -372175928 32765 32768 1 4195910 0 0 0 1229117345 230489935 4195664 0 -372175936 32765 0 0 0 0 1292031905 -230216595 -1904420959 -202356897 0 32765 0 0 0 0 1552312115 
32765 32768 1 4195910 0 0 0 1229117345 230489935 4195664 0 -372175936 32765 0 0 0 0 1292031905 -230216595 -1904420959 -202356897 0 32765 0 0 0 0 1552312115 32550 1552205368 32550 
4195910 0 0 0 1229117345 230489935 4195664 0 -372175936 32765 0 0 0 0 1292031905 -230216595 -1904420959 -202356897 0 32765 0 0 0 0 1552312115 32550 1552205368 32550 441844 0 0 
0 1229117345 230489935 4195664 0 -372175936 32765 0 0 0 0 1292031905 -230216595 -1904420959 -202356897 0 32765 0 0 0 0 1552312115 32550 1552205368 32550 441844 0 0 0 0 0 
4195664 0 -372175936 32765 0 0 0 0 1292031905 -230216595 -1904420959 -202356897 0 32765 0 0 0 0 1552312115 32550 1552205368 32550 441844 0 0 0 0 0 0 0 4195664 
32765 0 0 0 0 1292031905 -230216595 -1904420959 -202356897 0 32765 0 0 0 0 1552312115 32550 1552205368 32550 441844 0 0 0 0 0 0 0 4195664 0 -372175936 32765 
0 0 1292031905 -230216595 -1904420959 -202356897 0 32765 0 0 0 0 1552312115 32550 1552205368 32550 441844 0 0 0 0 0 0 0 4195664 0 -372175936 32765 4195705 0 -372175944 
-230216595 -1904420959 -202356897 0 32765 0 0 0 0 1552312115 32550 1552205368 32550 441844 0 0 0 0 0 0 0 4195664 0 -372175936 32765 4195705 0 -372175944 32765 28 0 
0 32765 0 0 0 0 1552312115 32550 1552205368 32550 441844 0 0 0 0 0 0 0 4195664 0 -372175936 32765 4195705 0 -372175944 32765 28 0 1 0 -372170838 
0 0 0 1552312115 32550 1552205368 32550 441844 0 0 0 0 0 0 0 4195664 0 -372175936 32765 4195705 0 -372175944 32765 28 0 1 0 -372170838 32765 0 0 
1552312115 32550 1552205368 32550 441844 0 0 0 0 0 0 0 4195664 0 -372175936 32765 4195705 0 -372175944 32765 28 0 1 0 -372170838 32765 0 0 0 0 33 

无论我给出什么输入,维度的值都会在两者之间发生变化。这是我在一个在线IDE上得到的。在我在ubuntu中运行的终端上,它显示"分段错误(核心转储("。作为一个熟悉Python的人,我发现很难处理C的规则。我该如何解决此问题?

非常感谢。

问题是在第二个循环中检查条件是错误的。

你有

for(j = 0; i < dimension; j++)

而不是

for(j = 0; j < dimension; j++)

例如,对于i值0,i < dimension始终为真,并且j值在没有任何限制的情况下递增。因此,当您尝试访问square[i][j]时,j的值可能比dimension大得多,这是无效的内存访问,会导致分段故障

相关内容

  • 没有找到相关文章

最新更新