在C中使用2D数组进行简单I / O时变量值发生更改,导致分段错误

问题描述 投票:0回答:2

首先,请原谅,我是初学者。我只是想获得一个正方形的尺寸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 dimension\n", 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的规则。我该如何解决?

非常感谢。

c multidimensional-array segmentation-fault
2个回答
2
投票

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

您有-

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

而不是

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

例如,i的值为0,则i < dimension始终为true,并且j的值无限制地递增。因此,当您尝试访问square[i][j]时,j的值可能比dimension大得多,这是无效的内存访问,这会导致分段错误

© www.soinside.com 2019 - 2024. All rights reserved.