Bonsoir,
j´essais de faire un petit RPG en C avec SDL. Mais j´ai une ereur de segmentation... j´ai beau chercher, je ne vois vaiment pas d´ou sa peut venir.
En gros, je lis dans un .txt les parametres d´une map ( texture,objet, personnages...) et j´ai un probleme avec les objets...
Premier probleme: je charge les objets en memoire vive, donc je fait des allocation dynamique de memoire de la structure objet avec :
element_objet=(objet*)malloc(sizeof(objet));
voici les declaration des struct:
typedef struct personnage
{
short zone_x,zone_y;
char nom[30],adresse[30],nom_im[30];
SDL_Surface* im;
struct personnage* p;
} personnage;
typedef struct objet
{
short zone_x,zone_y;
char nom[30],adresse[30],nom_im[30];
SDL_Surface* im;
struct objet* p;
} objet;
(pour le moment objet et personnage sont identiques ( je suis loin d´avoir finit lol ^^) si je met (personnage*) a la place de (objet*) le compilateur le prend... m´enfin sa me plait pas lol)
et le compilateur me dit qu´il y a une ereur dans la parenthese (objet*) . Objet est bien definit ( dans un .h qui est bien inclu
) mais rien a faire, sa passe pas.
(au passage, j´ai la meme fonction qui le fait avec une structure personnage ( qui est exactement identique a objet pour le moment ^^).
pourtant, un peu avant, objet* element_objet=NULL; ne pose aucun probleme...
Bon enfin a la limite c´est pas reelement grave si je met pas (objet*) ( meme si sa montre que quelquechose va pas...) mais mon plus gros probleme:
objet lis les info de la map et appele une fonction qui lui renvoit un SDL_Surface*... voici la fonction:
SDL_Surface* buff_im(char* adresse)
{
SDL_Surface* image=NULL;
image=SDL_LoadBMP(adresse);
return(image);
}
et ben je sais pas comment sa se fait, mais au debut de la fonction, adresse=="./data/objets/objet1.bmp", et juste apres le loadbmp, adresse=="||à |||`arbr" ... ( j´ai fait une fonction qui enregistre dans un fichier la valeur de nom, je l´ai mise avant, puis apres, et sa m´a donné sa -_-)...
SDL_LoadBMP(adresse) n´est pas censé modifier adresse... resultat il ne charge pas l´adresse, et sa plante au moment de la blitter a l´ecran (normal) avec dans le fichier stderr: Fatal signal: Segmentation Fault (SDL Parachute Deployed)...
Je sais pas du tout lol ^^. La segmentation arrive quand on ecrit a une mauvaise adresse ( si j´ai biencomprit ^^) mais j´ai relu tout mon code... rien a faire, chaque pointeur est a sa place et pointe au bon endroit enfin je pense...). Par contre, si je modifie ma fonction pour qu´elle enregistre adresse, dans un nouveau tableau ( disons char ad[30]) et que je fait image=SDL_LoadBMP(ad); la sa marche!!! mais sa modifie quand meme adresse... donc il se pourrait qu´en memoire SDL_Load BMP charge l´image sur adresse... mais adresse est bien definit ( dans la fonction qui appelle celle ci dessus: char adresse[30];) et je sais que je n´ecrit pas au dela du tableau.
Ou alors ce serait mon allocation dynamique des SDL_Surface? mais sa m´etonnerai, sinon comment je fait pour charger mes textures lol ^^
hum, j´y pense, j´ai plusieurs pointeur de SDL_LoadBMP qui pointent vers la meme image (pour economiser la memoire, je nele charge qu´une fois ;) )alors pour texture, sa marche, il me charge des centaines de cases a partir d´une image, mais pour objet sa marche pas....
je montrerai bien un peu plus de code, mais disons que mes fonction sont assez concentrés en general...
Bon voila, desolé pour le monologue mais la je bloque vraiment ^^ merci a ceux qui auront le courage de me lire :D