C: envoie d'une struct à une fonction pblm!!

foxdie -  
 foxdie -
Bonjour, je suis débutant dans la programmation, et j'essaie de faire un petit jeu avec la bibliothèque SDL.

Alors voilà le problème :
à partir d'une fonction "void editeur" je renvoie à une foction 
enregistrerLeNiveau(ecran, Image[NOMBRE_DE_BLOC_LARGEUR][NOMBRE_DE_BLOC_HAUTEUR],  &sauvegarde);

Sachant que image[...][...] est une structure 

Et voilà la fonction en question
void enregistrerLeNiveau (SDL_Surface *ecran, DonneeImage Image[NOMBRE_DE_BLOC_LARGEUR][NOMBRE_DE_BLOC_HAUTEUR],  int *sauvegarde)



Mon problème c'est que les informations la structure Image[...][...] reçues par la fonction enregistrerLeNiveau (certaines seulement) sont différentes de celles contenue dans la fonction "editeur( )" (j'ai fait un fprintf dans la fonction "editeur( )" et dans la fonction "enregistrerLeNiveau( )" pour vérifier).

Autre chose, j'ai eu un autre problème avant ça que je n'arrive pas à comprendre:

J'ai mis d'abord :
enregistrerLeNiveau(Image[NOMBRE_DE_BLOC_LARGEUR][NOMBRE_DE_BLOC_HAUTEUR], ecran,  &sauvegarde);

(c à d, j'ai mis la structure avant la SDL_Surface et le programme à planter lorsque j'ai voulu avoir accès à ecran->format, le débug m'a mis "Violation d'accès lors de la lecture de l'emplacement" .

Mais lorsque j'ai changer l'ordre des paramètres en mettant la SDL_Surface, j'ai plus eu de problème...

Si vous pouviez m'aidez ça évitera peut être à mon pc de se faire tabasser à coup de marteau : )

Merci de m'avoir lu, j'attends vos réponses...

2 réponses

le père
 
Bonjour

Bizarre ce que tu racontes...
Quand tu déclares ta fonction
void enregistrerLeNiveau (SDL_Surface *ecran, DonneeImage Image[NOMBRE_DE_BLOC_LARGEUR][NOMBRE_DE_BLOC_HAUTEUR],  int *sauvegarde)
le second paramètre est un tableau.
Quand tu l'appelles
enregistrerLeNiveau(ecran, Image[NOMBRE_DE_BLOC_LARGEUR][NOMBRE_DE_BLOC_HAUTEUR],  &sauvegarde);
le second paramètre n'est pas le tableau, mais un élément du tableau. Le compilateur n'a sûrement pas accepté ça sans broncher.De plus, c'est un élément situé en dehors du tableau, car le dernier est Image[NOMBRE_DE_BLOC_LARGEUR-1][NOMBRE_DE_BLOC_HAUTEUR-1]. Du moins, on peut le supposer car tu ne donnes pas les définitionse des variables.
Je crois que si ça passe quand même au niveau du compilateur, c'est que tu as mis autre chose (type casting ??) que tu n'as pas montré ici par souci de simplification.
0
foxdie
 
Quand tu l'appelles

enregistrerLeNiveau(ecran, Image[NOMBRE_DE_BLOC_LARGEUR][NOMBRE_DE_BLOC_HAUTEUR],  &sauvegarde);

le second paramètre n'est pas le tableau, mais un élément du tableau. Le compilateur n'a sûrement pas accepté ça sans broncher



Ah ben oui, tu as raison, j'ai fait une erreur stupide, merci de ta réponse

Maintenant j'aimerais bien savoir comment je fais pour envoyer mon tableau de structure à une autre fonction?
0
foxdie
 
C'est bon, j'ai réussi à envoyer un tableau de structure à une autre fonction, pour ceux que ça intéresse voilà ce que j'ai mis:

struct Structure{ } ;
typedef struct Structure Structure;

void mafonction();

void main ();
{
Structure MaStrct[12][15];
.....

mafonction (MaStrct);
......
}

void ma fonction (Structure MaStrct_apres_envoie [12][15] )
{
........
}


Le problème est résolu maintenant.
0