CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Probleme de segmentation avec SDL.

loulou15
loulou15
Niveau 8
19 avril 2006 à 23:58:47

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

dnob700
dnob700
Niveau 10
20 avril 2006 à 00:25:32

tu est sur que le Load_BMP réussie ? pour le vérifier regarde la valeur de image (ça doit être NULL si ça rate je pense).

Peut-être que ton adresse est fausse et qu´iln´arrive tout simplement pas à charger l´image, ou ça genre de chose.

loulou15
loulou15
Niveau 8
20 avril 2006 à 01:03:37

merci dnob700 d´avoir repondu ^^

c´etait juste un element_objet-> machin =NULL; un peu apres un objet* element_objet=NULL; :)

et bien bonne nuit tout le monde ^^

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment