Tableau à 2 dimensions avec utilisation de MALLOC
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:
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