Tout d'abord bonjour à tous,

J'ai, comme vous vous en doutez, un petit problème...
Voici le bout de code qui me chiffone, j'expliquerais après ce que je ne trouve pas normal :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Case Case;
struct Case
{
    int valeur;
    int affichage;
};
 
int main()
{
    int i;
    int j;
    int nbreCaseLargeur = 10;
    int nbreCaseHauteur = 5;
    Case ** tab = NULL;
 
    tab = malloc (nbreCaseLargeur * sizeof(Case *));
 
    if (tab != NULL)
    {
        for (j=0; j<nbreCaseHauteur; j++)
        {
            tab[j] = malloc (nbreCaseHauteur * sizeof(Case));
 
            if (tab[j] == NULL)
            {
                printf("Erreur de reservation");
            }
        }
    }
 
    for (i=0; i<nbreCaseLargeur; i++)
    {
        for (j=0; j<nbreCaseHauteur; j++)
        {
            tab[i][j].valeur = 0;
            tab[i][j].affichage = 0;
                printf("%d - %d\n",i,j);
        }
    }
 
    for (i=0; i<nbreCaseLargeur; i++)
    {
        free(tab[i]);
    }
    free(tab);
}
D'après ce que je pense, je réserve un tableau de nbreCaseLargeur parties contenant chacune un tableau de nbreCaseHauteur parties qui seront des Case (structure créée).

Le problème se passe ici :
tab[i][j].valeur = 0;
tab[i][j].affichage = 0;
Je pensais donc qu'en appelant par exemple,
tab[8][3].valeur = 0;
cela marcherait... Mais ce n'est pas le cas... Par contre,
tab[3][8].valeur = 0;
marche !

Pourquoi la première dimension (qui pour moi était les nbreCaseLargeur parties)
se trouve dans le second [] ?

Je pourrais tout simplement inverser les i et j, mais je n'aurais pas compris pourquoi il y aurait un problème et cela pourrait se reproduire...

Donc si quelqu'un avait l'âme charitable à m'expliquer ^^

Merci d'avance