Porque é que a 2ª fila da minha matriz 2d tomar valores aleatórios de RAM?

votos
1

então eu estou trabalhando neste projeto para a classe, e eu estou tentando atribuir valores a uma matriz 2D usando um loop for, mas eu correr em um dos problemas dos pares. Aqui está o meu código:

#include <iostream>
#include <string>
using namespace std;

const int MAX = 10;

int main()
{

    int matrix2[MAX][MAX];
    int matrix1[MAX][MAX];


      int i, j;

      j=0;
    for (i=0; i < MAX; i++){

        matrix1[i][j] = i + 5;

        for (j=1; j < MAX; j++){
            matrix1[i][j] = matrix1[i][j-1] + 4;

            cout << matrix1[i][j] <<  ;
        }
        cout << endl;
    }




}

E é isso que ele gera:

9 13 17 21 25 29 33 37 41 
1422620036 1422620040 1422620044 1422620048 1422620052 1422620056 1422620060 1422620064 1422620068 
10 14 18 22 26 30 34 38 42 
11 15 19 23 27 31 35 39 43 
12 16 20 24 28 32 36 40 44 
13 17 21 25 29 33 37 41 45 
14 18 22 26 30 34 38 42 46 
15 19 23 27 31 35 39 43 47 
16 20 24 28 32 36 40 44 48 
17 21 25 29 33 37 41 45 49   

e esta é a saída Eu estou tentando obter:

5   9   13  17  21  25  29  33  37  41  
6   10  14  18  22  26  30  34  38  42  
7   11  15  19  23  27  31  35  39  43  
8   12  16  20  24  28  32  36  40  44  
9   13  17  21  25  29  33  37  41  45  
10  14  18  22  26  30  34  38  42  46  
11  15  19  23  27  31  35  39  43  47  
12  16  20  24  28  32  36  40  44  48  
13  17  21  25  29  33  37  41  45  49  
14  18  22  26  30  34  38  42  46  50

Estou perguntando se alguém o que eu posso fazer para corrigir a segunda fila, e também por isso que a primeira coluna não é impressão

Publicado 19/09/2018 em 12:59
fonte usuário
Em outras línguas...                            


3 respostas

votos
4

jé 0apenas para o primeiro " iiteração"; em todos os outros casos é MAX.
Nos casos em que é MAX, matrix[i][j]tem indefinido comportamento.

A solução robusta é usar suas variáveis de laço para looping e nada mais.
Declare tudo em tão pequeno um alcance possível.

for (int i = 0; i < MAX; i++){
    matrix1[i][0] = i + 5;
    for (int j = 1; j < MAX; j++){
        matrix1[i][j] = matrix1[i][j-1] + 4;
        cout << matrix1[i][j] << " ";
    }
    cout << endl;
}
Respondeu 19/09/2018 em 13:09
fonte usuário

votos
2

o problema é que jnão é reposto em tempo, de modo que a linha de matrix1[i][j] = i + 5;j é passado da extremidade da matriz. Mova definir ja zero frente uma linha

for (i=0; i < MAX; i++){
    j = 0;

    matrix1[i][j] = i + 5;

    for (j=1; j < MAX; j++){
        matrix1[i][j] = matrix1[i][j-1] + 4;

        cout << matrix1[i][j] << " ";
    }
    cout << endl;
}

ou alterar matrix1[i][j] = i + 5;a matrix1[i][0] = i + 5;como Richard Critten sugeriu

Respondeu 19/09/2018 em 13:05
fonte usuário

votos
0

Sua redefinição de j deve estar dentro do loop. Na segunda ronda (i = 1), j começa como MAX.

for (i=0; i < MAX; i++){
  j=0;
Respondeu 19/09/2018 em 13:06
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more