Et tu veux déjà manipuler des tableaux dynamiques à 3 dimensions ? T'es pas un peu tombé sur la tête, là ?Envoyé par Funraill.net
Reprenons.
Le tableau dont tu as besoin as-t-il une taille connue à la compilation ou à l'exécution ?
Et tu veux déjà manipuler des tableaux dynamiques à 3 dimensions ? T'es pas un peu tombé sur la tête, là ?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.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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 texture = malloc(400 * sizeof(*texture)); if(texture == NULL){ printf("Erreur: Memoire insufisante !"); //exit(1); }
La, non.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 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...Envoyé par Emmanuel Delahaye
Ce qui est déjà beaucoup pour un débutant, je te l'accorde.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
alors funraill.net pb résolu ou non ?
Partager