Et tu veux déjà manipuler des tableaux dynamiques à 3 dimensions ? T'es pas un peu tombé sur la tête, là ?Citation:
Envoyé par Funraill.net
Reprenons.
Le tableau dont tu as besoin as-t-il une taille connue à la compilation ou à l'exécution ?
Version imprimable
Et tu veux déjà manipuler des tableaux dynamiques à 3 dimensions ? T'es pas un peu tombé sur la tête, là ?Citation:
Envoyé par Funraill.net
Reprenons.
Le tableau dont tu as besoin as-t-il une taille connue à la compilation ou à l'exécution ?
Il y a confusion ici.Citation:
Envoyé par Funraill.net
De une, tu ne peux pas declarer un tableau de taille variable.
D'ailleurs ton compilateur a du te le signaler dans sa grande gentillesse.
Soit la taille est connue par avance, auquel cas tu le declares avec un taille constante, soit la taille est variable, auquel cas il faut allouer.
Et de toute facon, vu que ce tableau doit encore exister a la sortie de la fonction, tu es oblige de l'allouer.
Ensuite, tu as simplement besoin d'un tableau a 3 dimensions. Ici tu en a declare un a six dimensions. Ca fait un peu trop.
Pourquoi 400 ? Ne serait-ce pas plutot h ?Code:
1
2
3
4
5
6 texture = malloc(400 * sizeof(*texture)); if(texture == NULL){ printf("Erreur: Memoire insufisante !"); //exit(1); }
La, non.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 // On formate le tableau de sortie pour OpenGL for(i=0; i<h; i++) { for(j=0;j<l;j++) { texture[i][j][0] = image[i*h*3+j*3]; texture[i][j][1] = image[i*h*3+j*3+1]; texture[i][j][2] = image[i*h*3+j*3+2]; /*printf("textureR:%d\ntextureG:%d\ntextureB:%d\n",texture[i][j][0],texture[i][j][0],texture[i][j][0]);*/ } } return(texture); }
Tu n'as alloue que la premiere dimension du tableau.
Il faut allouer le reste.
Ca devrait ressembler a ca :
Et surtout on n'oublie pas de tout liberer apres.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 for(i=0; i<h; i++) { texture[i] = malloc(l * sizeof(*(texture[i]))); if (texture[i] == NULL) { /* ** Traitement de l'erreur */ } for(j=0;j<l;j++) { texture[i][j] = malloc(3 * sizeof(*(texture[i][j]))); if (texture[i][j] == NULL) { /* ** Traitement de l'erreur */ } texture[i][j][0] = image[i*h*3+j*3]; texture[i][j][1] = image[i*h*3+j*3+1]; texture[i][j][2] = image[i*h*3+j*3+2]; /* printf("textureR:%d\ntextureG:%d\ntextureB:%d\n",texture[i][j][0],texture[i][j][0],texture[i][j][0]); */ } }
Euh, accuse-moi de dipterophilie si tu veux, mais je crois bien que seules deux des trois dimensions sont dynamiques...Citation:
Envoyé par Emmanuel Delahaye
Ce qui est déjà beaucoup pour un débutant, je te l'accorde.
alors funraill.net pb résolu ou non ?