Tableau dynamique de type crée dans une structure
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 :
Code:
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); |
et le .c :
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
|
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);
} |
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:
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 :
Code:
1 2
|
printf ("%d\n", anim[1].ctr); |
Mais une fois de retour dans la fonction "initAnimD" je n'ai plus accès au tableau joueur.
Code:
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
} |
J'en conclus que le tableau est mal alloué mais je ne sais pas quoi faire pour régler le problème.
Merci.