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:54:41

Bonsoir,
je ne sais pas si je devais mettre mon post sur ce forum ou sur celui de programmation ^^, mais bon, sa traite de creation de jeux.

Donc voila, 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));

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

Fvirtman
Fvirtman
Niveau 10
20 avril 2006 à 00:02:21

attention, si tu as créé une structure objet ainsi :

struct objet
{

};

le type "objet" n´existe pas : c´est le type "struct objet" qui existe. Pour éviter cela, fait une typedef.

Sinon, ton probleme sent bien entendu le débordement au préalable, car en effet, le pointeur adresse ne doit pas etre modifié.

Si tu veux en savoir plus rapidement, je suis en ce moment sur MSN, check ma carte de visite

dnob700
dnob700
Niveau 10
20 avril 2006 à 00:35:02

est-ce que tu es sur qu´au moment où tu lance le programme le répertoire de travail est bien celui que tu croit qu´il est ?
(genre le programme est dans un dossier (celui que tu appelle implicitement . dans adresse) mais tu le lance depuis ailleurs (peut-être parce que ton IDE (si tu en as une) gère ça différement).

loulou15
loulou15
Niveau 8
20 avril 2006 à 00:38:05

non, je suis sur que le repertroire est bon, sa a deja marché ^^ mais j´ai refondu ma fonction de chargement d´objet, la sa marche plus ^^

merci pour ta reponse :)

loulou15
loulou15
Niveau 8
20 avril 2006 à 01:01:48

bon ben je suis debile :) en refondant ma fonction de chargement d´objet, j´avait oublié d´enlever ou de bouger une ligne: element_objet->machin=NULL, et cette ligne et au debut de mon code, un peu apres objet* element_objet=NULL; ...j´ai du relire 5 fois ce passage avant d´etre obligé de voir que l´ereur venait de la avec des system("pause") ^^

Bon bha merci de votre aide :)

sa fait plasir de voir que des personnes repondent :)

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