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 :
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).
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); }
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
Partager