Значение переменной изменяется при простом вводе-выводе с двумерным массивом в C, что приводит к ошибке сегментации - PullRequest
0 голосов
/ 03 мая 2020

Прежде всего, извините, я новичок. Я просто пытаюсь получить размер n квадрата и заполнить 2D-массив значениями от 1 до n ^ 2. Это то, что я кодировал:

#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. Как мне это решить?

Большое спасибо.

1 Ответ

2 голосов
/ 03 мая 2020

Проблема в том, что во втором l oop условие проверки неверно.

У вас есть -

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

вместо

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

Например, i значение 0, i < dimension всегда истинно, а значение j увеличивается без каких-либо ограничений. Таким образом, при попытке доступа к square[i][j] значение j может быть намного больше, чем dimension, и это неверный доступ к памяти, который приводит к ошибке сегментации

...