Bonjour à tous et déjà merci pour votre aide.
J'aimerai allouer un tableau de type "info" via une fonction mais ça ne marche pas, je met le bout de code qui plante :
le .h :
et le .c :
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 typedef struct info { int frame, ctr; SDL_Rect delim; }info; typedef struct animE { info *joueur; info *fleur, *mage; }animE; void initAnim(char emplacementFichier[], info anim[]); void initAnimD(void);
Donc la fonction "initAnimD" est appelée dans le main et demande, depuis un fichier .anim, de remplir un tableau qui gère les animations (ici pour le héros, mais le but est de pouvoir remplir d'autre tableau comme pour les monstres juste en appelant la fonction "initAnim").
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 animE anim; void initAnimD(void) { initAnim("Ressource/Anim/Hero.anim", anim.joueur); } void initAnim(char emplacementFichier[], info anim[]) { FILE *animF = NULL; int nombreAnim = 0, i; animF = fopen(emplacementFichier, "r"); fscanf (animF, "%d\n", &nombreAnim); anim = malloc(nombreAnim*sizeof(info)); for (i=0; i<nombreAnim;i++) { fscanf (animF, "%d,%d,%d,%d,%d,%d\n",&anim[i].frame,&anim[i].ctr ,&anim[i].delim.x, &anim[i].delim.y ,&anim[i].delim.w, &anim[i].delim.h); } fclose (animF); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 initAnim("Ressource/Anim/Hero.anim", anim.joueur); // Envoi le tableau joueur initAnim("Ressource/Anim/Mage.anim", anim.mage); // Envoi le tableau mage (un monstre)
Donc tant que je suis dans la fonction : "initAnim" je peut avoir accès aux valeurs stockées dans le tableau, avec un printf par exemple :
Mais une fois de retour dans la fonction "initAnimD" je n'ai plus accès au tableau joueur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 printf ("%d\n", anim[1].ctr);
J'en conclus que le tableau est mal alloué mais je ne sais pas quoi faire pour régler le problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void initAnimD(void) { initAnim("Ressource/Anim/Hero.anim", anim.joueur); printf ("%d\n", anim.joueur[1].ctr); // Ici le programme plante }
Merci.
Partager