Pourquoi la 2ème ligne de mon tableau 2d prend des valeurs aléatoires de RAM?

voix
1

donc je travaille sur ce projet pour la classe, et je suis en train d'attribuer des valeurs à un tableau 2D en utilisant une boucle, mais j'ai rencontré quelques problèmes. Voici mon code:

#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;
    }




}

Et voici ce qu'elle génère:

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   

et c'est la sortie que je suis en train de faire:

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

Je demande si quelqu'un ce que je peux faire pour fixer la deuxième rangée, et aussi pourquoi la première colonne n'est pas l'impression

Créé 19/09/2018 à 12:59
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
4

jest 0que pour la première « iitération »; il est dans tous les autres cas MAX.
Dans les cas où il est MAX, matrix[i][j]a un comportement non défini.

La solution robuste est d'utiliser vos variables de boucle pour boucle et rien d' autre.
Déclarer tout aussi petit que possible la portée.

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;
}
Créé 19/09/2018 à 13:09
source utilisateur

voix
2

le problème est que jest pas réinitialisé dans le temps, de sorte que la ligne matrix1[i][j] = i + 5;j est passé à la fin du tableau. Déplacer la mise jà zéro avant une ligne

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 changer matrix1[i][j] = i + 5;pour matrix1[i][0] = i + 5;que Richard Critten suggéré

Créé 19/09/2018 à 13:05
source utilisateur

voix
0

Votre réinitialisation j doit être à l'intérieur de la boucle. Dans la deuxième série (i = 1), j commence comme MAX.

for (i=0; i < MAX; i++){
  j=0;
Créé 19/09/2018 à 13:06
source utilisateur

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