Accueil > Forum > > > > segmentation fault help
segmentation fault help
mardi 6 janvier 2004 à 17:27:30 |
segmentation fault help

alabb
|
aidez moi je suis un new bie, j'ai un segmentation fault a la fin du prog: si gagant apres avoir affiché WINNER si perdant apres avoir affiché "votre score est de.." c un pendu comme vous l'avez remaqué merci d'avance #include <stdio.h> #include <string.h> #include <stdlib.h> int b,i,j,L,chance; char tmp; char S[20]; char *S2; typedef struct T_AUX{int score;int chance; char statut;}T_AUX; T_AUX alex; char *load_word(char *filename){ FILE *f;int i,h; f=fopen(filename,"r"); if(f==NULL) return 0; srand(time=NULL); fscanf(f,"%d\\n",&h); for(i=0;i<h;i++){ fscanf(f,"%s\\n",S);} fclose(f); printf("nbr de mot : %d\\n",h); printf("%s\\n",S); return S; } int ajouter_mot(char *filename){ char z;FILE *f; printf("CONGRATULATION!!!!!!!! \\nEntrez le nouveau mot a rentrer:\\n"); scanf("%s",&z); f=fopen(filename,"a"); if(f==NULL) {printf("fichier pas trouve");return 0;} fprintf(f,"\\n"); fprintf(f,&z); fclose(f); return 0;} char *crea(){ i=strlen(S); printf("%d\\n",i); S2=(char*)malloc(i*sizeof(char)); if(S2==NULL){printf("erreur Malloc");exit(1);} for(j=0;j<i;j++){ strcpy(&S2[j],"-");} return S2;} char insertion(){ char L; printf("entrez une lettre ou tapez le mot directement:\\n"); scanf("%s",&L); return L; } void verif(char L){ int a=0; b=strlen(&L); printf("long= %d\\n",b); if(strlen(&L)>1){ printf("longueur > a 1\\n"); if(strcmp(&L,S)==0){ a=1; strcpy(S2,&L); }} else{ for(i=0;i<=6;i++){ if(S[i]==L){ S2[i]=L; a=1; }}} if(a==0){ alex.chance--;} } int etat(int chance){ if(chance==0){strcpy(&alex.statut,"Dead"); printf("YOU ARE DEAD\\n"); } else if(strcmp(S,S2)==0){ strcpy(&alex.statut,"Safe"); ajouter_mot("mots_pendu.txt"); printf("WINNER\\n");} else{ for(i=0;i<=6;i++){ printf("%c",S2[i]);} strcpy(&alex.statut,"Sursit"); printf("\\nil vous reste %d chance(s) de reussir a decouvrir le mot;)\\n",chance);} return 0;} int make_score(){ alex.score=100*alex.chance*strlen(S); printf("votr
|
|
mardi 6 janvier 2004 à 17:33:31 |
Re : segmentation fault help

alabb
|
voila la fin
score est de %d\\n",alex.score); printf("fichier ffff!n"); return 0;}
int main(){
alex.chance=3; load_word("mots_pendu.txt"); crea(); do{ tmp=insertion(); verif(tmp); etat(alex.chance); printf("%s\\n",&alex.statut);} while(strcmp(&alex.statut,"Sursit")==0);
make_score(); return 0; }
|
|
mardi 6 janvier 2004 à 17:56:27 |
Re : segmentation fault help

ymca2003
|
plusieurs choses :
- pour faire un retour chariot, c'est "\\n" pas "\\\\n"
- dans la fonction "load_word" : for(i=0;i<h;i++) { fscanf(f,"%s\\\\n",S); }
=> la chaîne de caractère S est écrasée à chaque lecture dans le fichier.
- dans la fonction "ajouter_mot" : scanf("%s",&z);
=> tu veut lire une chaîne de caractère mais tu donne en paramètre un pointeur sur un seul caractères. il faut : scanf("%c", &z); ou char chaine[20]; scanf("%s", chaine);
meme chose pour fprintf(f,&z); cette fonction écrit une chaîne de caractères et tu lui donne l'adresse d'un caractère => la fonction va écrire tout ce qui se situe en mémoire après ce caractère jusqu'a trouver un caractère nul.
- strcpy(&alex.statut,"Dead");
tans ta déclaration de type, alex.statut est un caractère, pas une chaîne (un tableau quoi). => la fonction va écrire 'D' sur ce caractère pui 'e' sur l'octet suivant en mémoire et ainsi de suite... D'ou le segmentation fault.
Avant de t'amuser à faire du malloc pour créer des chaîne de caractères, essaye d'abord de faire marcher ton prog en utilisant des tableaux statiques. Attention à la différence entre un pointeur sur un caractère et un pointeur sur le premier caractères d'un tableau, qui se note effectivement char* mais qui ont des signification différentes.
|
|
mardi 6 janvier 2004 à 19:37:01 |
Re : segmentation fault help

djl
|
looooooooooool!!!!!!!!
ymca2003==> alabb faisait bien des \\n , c'est juste que vous avez tous les 2 cru qu'il falait le doubler!
|
|
mardi 6 janvier 2004 à 19:38:28 |
Re : segmentation fault help

djl
|
scuz, c'est bon c'est un bug, ya le meme en ce qui concerne les sources, les \\ sont doublés !?!
|
|
mardi 6 janvier 2004 à 21:19:17 |
Re : segmentation fault help

ymca2003
|
C'est bizarre ça ????
je trouvais bizarre que alabb c'était planté là dessus
|
|
mercredi 7 janvier 2004 à 17:02:08 |
Re : segmentation fault help

alabb
|
me rvoila avec moins de probleme et mertci de m'en avoir resolu
pour load word j'amerais _ connaitre le nombre de ligne donc de mot dan smon fichier texte _ pouvoir choper une ligne de facion aleatoire
por add_hightscore _ ca me marque n importe koi je pense à des adrresses _ j'ai un warning quand je veux ecrire tab[i].score dans mon fichier du style passing arg2 of makes pointer from integer
merci encore
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h>
typedef struct T_AUX{int score;int chance; char statut[10];}T_AUX; typedef struct T_gamer{char nom[20];int score;}T_gamer; typedef T_gamer T_TabHight[10];
char L[20];char S[20];char *S2;
T_AUX alex;
char *load_word(char *filename){ FILE *f;int h,i=0; f=fopen(filename,"r"); if(f==NULL) return 0; srand(time(NULL)); do{i++; fscanf(f,"\\n");} while(feof(f)!=0); h=1; for(i=0;i<3;i++){ fscanf(f,"%s\\n",S);} fclose(f); printf("nbr de mot : %d\\n",h); printf("%s\\n",S); return S; }
int ajouter_mot(char *filename){ char z[20];FILE *f; printf("CONGRATULATION!!!!!!!! \\nEntrez le nouveau mot a rentrer:\\n"); scanf("%s",z); f=fopen(filename,"a"); if(f==NULL) {printf("fichier pas trouve");return 0;} fprintf(f,"\\n"); fprintf(f,z);
fclose(f); return 0;}
char *crea(){ int i,j; i=strlen(S); printf("%d\\n",i); S2=(char*)malloc(i*sizeof(char)); if(S2==NULL){printf("erreur Malloc");exit(1);} for(j=0;j<i;j++){ strcpy(&S2[j],"-");} return S2;}
void verif(char *L){ int i,j,b,a=0; b=strlen(L); printf("long= %d\\n",b); if(strlen(L)>1){ printf("longueur > a 1\\n"); if(strcmp(L,S)==0){ a=1; strcpy(S2,L); }}
else{ for(i=0;i<strlen(S);i++){ for(j=0;j<strlen(L);j++){ if(S[i]==L[j]){ S2[i]=L[j]; a=1; }}}} if(a==0){ alex.chance--;} }
int etat(int chance){ int i; if(chance==0){strcpy(alex.statut,"Dead"); printf("YOU ARE DEAD\\n"); } else if(strcmp(S,S2)==0){ strcpy(alex.statut,"Safe"); ajouter_mot("mots_pendu.txt"); printf("WINNER\\n");} else{ for(i=0;i<=6;i++){ printf("%c",S2[i]);} strcpy(alex.statut,"Sursit"); printf("\\nil vous reste %d chance(s) de reussir a decouvrir le mot;)\\n",chance);} return 0;}
int make_score(){ alex.score=100*alex.chance*strlen(S); printf("votre score est de %d\\n",alex.score); return 0;}
void affiche_hight_score(char *filename){ FILE *f; T_TabHight tab; int i=0; f=fopen(filename,"r"); if(f==NULL) {printf("fichier pas trouve");fclose(f);} do{ i++; fscanf(f,"%s\\t",tab[i].nom); fscanf(f,"%d\\n",& tab[i].score); printf("\\t %-15s |\\t",tab[i].nom); printf("%d\\n",tab[i].score);} while(! feof(f)); fclose(f);}
void add_hightscore(char *filename,int score){ FILE *f; T_TabHight tab; int j,i=0; int ok=0;char nom[20]; f=fopen(filename,"r+w"); printf("entrez votre nom:\\n"); scanf("%s",nom); if(f==NULL) {printf("fichier pas trouve");fclose(f);} do{ fscanf(f,"%s\\t%d\\n",tab[i].nom,&tab[i].score); if(score>=tab[i].score){ strcpy(tab[i+1].nom,tab[i].nom); tab[i+1].score=tab[i].score; strcpy(nom,tab[i].nom); tab[i+1].score=score; i++; ok=1;} i++; } while(i<10 || !feof(f)); if(ok==1){ for(j=0;j<i-1;j++){ fprintf(f,tab[i].nom); fprintf(f,"\\t"); fprintf(f,tab[i].score); fprintf(f,"\\n"); }} fclose(f);}
int main(){
alex.chance=3; load_word("mots_pendu.txt"); crea(); do{ printf("entrez une lettre ou tapez le mot directement:\\n"); scanf("%s",L); verif(L); etat(alex.chance); printf("%s\\n",alex.statut);} while(strcmp(alex.statut,"Sursit")==0); affiche_hight_score("hight_pendu.txt"); make_score(); add_hightscore("hight_pendu.txt",alex.score); return 0; }
|
|
mercredi 7 janvier 2004 à 21:48:43 |
Re : segmentation fault help

ymca2003
|
pour lire une ligne dans un fichier, il y a la fonction fgets.
pour récupérer une ligne au hazard, tu parcours les lignes du fichier jusqu'à tomber sur la bonne.
pour modifier un ligne du fichier (MAJ highscore):
fait une copie de ton fichier dans un fichier temporaire.
écrase le contenu du fichier initiale (qui sera maintenat le fichier final)
parcours les lignes du fichier temporaire une par une. - si elle n'est pas à modifier, tu la recopie telle quelle dans le fichier final. - si ele doit être changée, tu écrit la nouvelle ligne à la suite du fichier final.
et ainsi de suite jusqu'à la fin du fichier temporaire
détruit le fichier temp
PS : je ne connait pas les fct de copie et de supression de fichier en C.
|
|
jeudi 8 janvier 2004 à 13:25:44 |
Re : segmentation fault help

alabb
|
merci est ce que tu peux corriger la fonction add_highscore stp pour la fonction loadword ca devrait aller..
|
|
Cette discussion est classée dans : int, printf, char, chance, alex
Répondre à ce message
Sujets en rapport avec ce message
concatenation [ par asmv ]
//a partir d'elements de tableau 'int' transformes en 'char'//essai de concatenation qui ne fonctionne pas pourquoi ?//merci pour votre aide#include #
Hachage fermé problème de lecture [ par mcflysupersonic ]
Bonjour je suis nouveau sur le forum est ceci est ma première question donc j'espère que je ne me suis pas trompé d'endroit pour poster.Voilà j'ai un
oh non!! [ par bako25 ]
Le prog suivant calcule le nombre des 'e' dans un paragraphe: #include #include<
problem avec un char[] [ par kibab ]
Bounour a vous tous, je suis nouveau de ce langage et je m'amuse à faire des épreuves diverses.Ici il y a un petit example mais jái un problem:#includ
Lecture et ecriture sur fichier [ par developvbdebut ]
Bonjour tout le mondeJe travaille sur la gestion des fichier en c.Mon livre n'explique pas clairement l'ectriture et la lecture dans les fichiers.Voic
Ouvrir et afficher un fichier texte en C [ par AsM0DeUz ]
'lut Je m'initie actuellement au C. Apres avoir fait les exos les plus basiques ... je passe au basique niveau 2 J'ai ecris qques lignes pour afficher
printf de char en hexadécimal affiche un byte en 4 caractères ? [ par develdelphi ]
Bonjour,Le printf de mon compilateur génère des erreures d'affichages, en effet je dipose de variables unsigned char que je voudrais affichées en héx
probleme affichage structure [ par lil_adriano ]
Slt tous le monde j'ai un souci avec l'affichage de mes structures. je dois faire la gestion d'une pizzeria.j'ai cree les structure et quelques proced
trier un tableau de stucture en c [ par peli20 ]
[^^happy13]salut, j ai un petit probleme en c ,j espere que vous m aidiez.. bon, j essaie d elaborer un programme faisant la gestion des contact, le r
aide pour realiser une repertoire telephonique en langage c [ par djamel000 ]
Bonjour , je souhaiterai réaliser un répertoire téléphonique à accès sécurisé(cryptage des données par mot de passe)et recherche rapide de coordonnées
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|