comme dit dans le titre, mon programme me renvoie un : "Program received signal SIGSEGV, Segmentation fault." J'ai lancé le debugger pour trouver d'où ça venait mais ne sachant pas trop comment m'en servir ni trop ce que signifie ce type de problème, je viens vous demander de l'aide.
Voici ce que j'obtiens avec le débugger :
Debugger name and version: GNU gdb 6.3
Child process PID: 3524
Program received signal SIGSEGV, Segmentation fault.
In ntdll!RtlpWaitForCriticalSection () (ntdll.dll)
In ntdll!LdrDisableThreadCalloutsForDll () (ntdll.dll)
In ntdll!LdrFindCreateProcessManifest () (ntdll.dll)
In ntdll!RtlCheckRegistryKey () (ntdll.dll)
In ntdll!LdrFindCreateProcessManifest () (ntdll.dll)
In ntdll!RtlCheckRegistryKey () (ntdll.dll)
In ntdll!LdrFindCreateProcessManifest () (ntdll.dll)
In ntdll!RtlUnhandledExceptionFilter () (ntdll.dll)
In ntdll!LdrFindCreateProcessManifest () (ntdll.dll)
In ntdll!RtlInitAnsiString () (ntdll.dll)
In ntdll!RtlAppendStringToString () (ntdll.dll)
In strchr () (ntdll.dll)
In ntdll!RtlAppendStringToString () (ntdll.dll)
Program received signal SIGSEGV, Segmentation fault.
In ntdll!RtlpWaitForCriticalSection () (ntdll.dll)
Debugger finished with status 0
Bon ba galère mais bon puisque qu'il faut mettre le code dans des balises allons-y ... mais pour les images et autre fichier lié au code je fais comment ? entre balise ?
alors le main.c
/*
** Projet commencé le 13/10/07
**
** Dernière modfification : 21/11/07
**
** main.c
**
** Fichier principal
**
** Role :
** - initialisation des bibliothèques
** - fonction main()
**
*/
#include "main.h"
int main(int argc, char* argv[])
{
SDL_Event evenement;
S_Carte Carte;
S_lib_sprite lib_sprite;
unsignedint fin=0;
/* initialisation de SDL, FMOD et autres */
if(Init()>0)
{
return1;
}
/* lancement de la fonction aléatoire pour initialisé la carte
Le code est pas superbement organisé, tu vas galérer plus tard (en même temps, un jeu en C c'est pas forcement la solution la plus judicieuse).
Pour ton segfault, c'est toujours pareil (j'ai pas lu ton code en détail) mais apprend à debugger. Debugger est essentiel (surtout dans les jeux)
Passe serieusement sous Visual C++ (t'es sous Windows apparement, rien ne t'empeche de recompiler sous Linux tes sources) si tu veux faire des jeux, même si c'est pour les faire en C car le debugger de MinGW très peu pour moi.
A verifier: pointeurs (valeurs + adresse) / retour des fonctions / deroulement des I/O avec les fichiers / verification des algorithmes
Pour les pointeurs, tu verifies les adresses, si une adresse est du genre 0xcdcdcdcd ça veut dire que ton objet n'est pas initialisé, 0xfeeefeee signifie que ton objet est déjà effacé, et 0x00000000 veut dire que ton objet n'est pas alloué. T'as des blagues du genre 0xbaadf00d pour des soucis avec les tableaux par exemple.
merci Kr00pS , je fais ce truc juste pour apprendre merci pour le lien Mais pourquoi passer sous VisualC++ il a quoi de mieux ?
Faut vraiment que j'apprenne à debugger oui mais pour Fvirtman, mon debugger me dit pas ou y a un prob exactement ... et c'est pour cela que je demande de l'aide ici d'ailleurs tu vois ou ça bug toi avec ce que m'a écrit le debugger (cf premier message) ?. Je suis, j'étais à court de solution...
J'utilise code blocks comme IDE, et le debugger est :
Debugger name and version: GNU gdb 6.3
Quand je plante il me dit en ouvrant une fenetre : program received signal SIGSEGV, Segmentation fault. Do you want to view the backtrace ?
Là je repond oui et j'obtiens dans la partie debugger de mon écran ce message :
In ntdll!RtlpWaitForCriticalSection () (ntdll.dll) avec une fenetre qui s'ouvre, la fenetre call stack à laquelle je ne comprends rien d'ou mon appel à l'aide..
mais si une ame charitable pouvait tester mon code ça serait plus simple peut etre car je sais pas trop ce qui est important à dire ou non
je sais pas ce qui se passe, c'est surtout si je faisais un copier coller correct plus que mon indentation je crois je corrige encore donc et désolé de ne pas avoir bien vérifié que ça correspondait à ce que j'ai dans IDE.
j'ai du encore boulété en effet en cliquant sur le lien on tombe sur la page : Vous venez de tomber sur une page qui n'existe pas ou n'existe plus..
Si le problème persiste, veuillez contacter l'équipe du site sur le formulaire de contact : Formulaire de contact
Pour revenir au site : Site du Zéro
L'équipe du site.
...
par contre quand on copie colle l'adresse donnée plus haut (http://www.gigasize.com/get.php/3196072177/RPG_Creation.zip) on tombe bien sur la page pour récup mon .zip ... je comprends pas ??!!
si tu en as un autre gratuit pour héberger mes fichier je prend, j'ai trouver ça en vitesse sinon pas besoin de s'inscrire pour télécharger heureusement !!
Le debugger de Visual C++ est une merveille (et je pèse mes mots). Je pense qu'a lui seul il justifie l'utilisation de l'IDE (en plus de L'intellisense qui est pas mal utile).
merci de ton aide, je pense que les allocations sont pas au top :s
Pour les vérifications je sais pas trop comment on fait. Aurais tu un exemple ? ou peut etre un lien vers un site l'expliquant ou sinon des titres de livres bien que là ce soit plus complexe j'ai peu de moyen financier en ce moment...
Je connais très peu le c, je débute et je cherche à comprendre et apprendre au fur et à mesure de mes erreurs
Je ne pense pas que le site d'ed soit adapté, il est plutôt fait pour approfondir.
Sinon pour les vérifications je pense à quelque chose de très simple :
typedefstruct{
int membre;
float x, y;
char visible;
} Structure;
Structure *nouveauModele(void){
Structure *new = NULL;
new = malloc(sizeof(*new));
if(new != NULL){// <-- voilà ce qui manque chez toi !!
membre = 0;
x = 0;
y = 0;
visible = 0;
}else{// <-- et en cas d'erreur
puts("*** nouveauModele(): erreur d'allocation");
}
return new;
}
En fait le problème est que si tu tentes d'accéder aux membres de la structure alors que l'allocation de mémoire à échoué, tu te retrouves avec une jolie erreur de segmentation.
Le but de ce site est de fournir au programmeur les moyens de réaliser du code correct, fiable et maintenable. Il s'adresse autant aux débutants qu'aux programmeurs C avertis.
merci pour le site, y a des trucs interessant pour un débutant comme moi mais je rejoins la remarque de soltic, il n'est pas si accessible que ça pour un débutant.
Et en complément de cette remarque, je crois que quand on commence à avoir une connaissance assez poussé d'un thème on a tendance à oublié combien il peut etre dur de comprendre pour une personne débutante et combien on leur demande d'acquérir de chose en même temps.
Le but de ce site est de fournir au programmeur les moyens de réaliser du code correct, fiable et maintenable. Il s'adresse autant aux débutants qu'aux programmeurs C avertis.
Emmanuel a peut-être essayé de créer quelque chose d'accessible aux débutants, et même si c'est ce qu'il dit avoir fait, je pense qu'il y a encore du boulot.
En attendant le Site du Zér0 et beaucoup de pratique suffisent dans un premier temps.
Donc pour revenir au sujet Brucella, je te conseille de relire tout ton code et de voir où il manque des mesures de sécurité. Une fois que tu auras fait ça, réfléchis à la cause du problème dans la boucle (débordement ? mauvaise allocation ?).
j'ai trouvé de jolies bourdes avec les allocations, comme tu l'avais souligné, je donnais comme taille celle du pointeur et pas celle de la structure vers lequel le pointeur pointait.
EX : "lib_sprite->sprites=malloc (lib_sprite->nb_sprites * sizeof lib_sprite->sprites); " alors que j'aurais du écrire il me semble :
"lib_sprite->sprites=malloc (lib_sprite->nb_sprites * sizeof *lib_sprite->sprites);
je vais mettre des mesures de sécurité maintenant que je vois à peu près comment faire et je vais m'attaquer à la boucle
Merci
Program received signal SIGSEGV, Segmentation fault.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html