Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
988 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Segmentation fault en C à la premiére ligne du programme :(

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Segmentation fault en C à la premiére ligne du programme :(

n°949390
Chewbye
Posté le 09-01-2005 à 00:05:50  profilanswer
 

Voila je comprend vraiment pas, dés la premiere ligne de mon code j'ai une segmentation fault, alors que cette ligne est un printf :(
Si vous pouviez m'aider merci encore.
Par contre je crois qu'en standar la librairie regex.h n'est pas installé avec windows, et j'utilise aussi un tree-tagger pour linux.
 
 
#include <sys/types.h>
#include <regex.h>
#include <search.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define TAILLE_TAMPON 500
#define FICHIER_PATRON "fpatron.txt"
 
 
 
struct list {
  char *rep;
  struct list *suivant;
};
typedef struct list ListRep;
 
typedef struct questionReponse {
  char *expReg;
  regex_t expRegComp;
  int *corresp;
  ListRep *listRep;
  ListRep *derniereRep;
  struct questionReponse *suivant;
} QuestionReponse;
 
 
 
/*typedef struct questionReponse QuestionReponse;*/
/*char Info[];*/
 
QuestionReponse *tabStruct = NULL;
 
 
/*void nomVar(char *chaine, int tab[]);*/
 
void RemplirTabStruct ()
{
  FILE *Fpatron;
  QuestionReponse *marqueur = NULL;
  int taillePhrase;
  int resultat;
  char *tampon = NULL;
  int nbligne;
  ListRep *reponse = NULL;
 
  printf("je t emmerde" );
   
  Fpatron = fopen(FICHIER_PATRON, "r" );
  tampon = malloc(TAILLE_TAMPON*(sizeof(char )));
 
  tabStruct = (QuestionReponse *) malloc(sizeof(QuestionReponse));
  marqueur = tabStruct ;
  while (!feof(Fpatron))
    {
       
       
      taillePhrase = 0;
      fgets(tampon, TAILLE_TAMPON, Fpatron);
      while ( *(tampon+taillePhrase) != '\n' && *(tampon+taillePhrase) != '\0')
 {
   taillePhrase++;
 }
      strcpy(marqueur->expReg, tampon);
      marqueur->expReg = (char *)malloc(taillePhrase*(sizeof(char)));
       
      resultat = regcomp(&(marqueur->expRegComp), marqueur->expReg, REG_EXTENDED);
        if (resultat != 0)  
   { /* erreur! */
     printf("\nError while compiling the RE: " );
     switch(resultat) {
     case REG_BADBR:  
       printf("invalid '\\{...\\}' construct in the RE.\n" );
       break;
     case REG_BADPAT:
       printf("syntax error in the RE.\n" );
       break;
     case REG_BADRPT:
       printf("a repetition operator such as ? or * appeared in a bad position.\n" );
       break;
     case REG_ECOLLATE:
       printf("the RE referred to an invalid collating element.\n" );
       break;
     case REG_ECTYPE:
       printf("the RE referred to an invalid character class name.\n" );
       break;
     case REG_EESCAPE:
       printf("the RE ended with '\\'.\n" );
       break;
     case REG_ESUBREG:
       printf("there was an invalid number in the '\\digit' construct.\n" );
       break;
     case REG_EBRACK:
       printf("there were unbalanced square brackets in the RE.\n" );
       break;
     case REG_EPAREN:
       printf("there were unbalanced parentheses in the RE or '\\(' and '\\)'.\n" );
       break;
     case REG_EBRACE:
       printf("there were unbalanced '\\{' or '\\}' in the RE.\n" );
       break;
     case REG_ERANGE:
       printf("one of the endpoints in a range expression was invalid.\n" );
       break;
     case REG_ESPACE:
       printf("refcomp or regexec ran out of memory.\n" );
       break;
     default:
       printf("autre erreur.\n" );
     }
   }
 fgets(tampon, TAILLE_TAMPON, Fpatron);
 /*nomVar(tampon, *marqueur->corresp);*/
 nbligne = 0;
 fgets(tampon, TAILLE_TAMPON, Fpatron);
 reponse = marqueur->listRep;
 while (*tampon != '\n' && *tampon !='\0')
   {
     reponse = malloc(sizeof(ListRep));
     taillePhrase = 0;
     while ( *(tampon+taillePhrase) != '\n')
       {
  taillePhrase++;
       }
     reponse->rep = malloc(taillePhrase*(sizeof(char)));
     strcpy(reponse->rep, tampon);
     fgets(tampon, TAILLE_TAMPON, Fpatron);
     reponse = reponse->suivant;
   }
 marqueur->derniereRep = marqueur->listRep;
 Fpatron ++;
 marqueur = marqueur->suivant;
 marqueur = (QuestionReponse *) malloc(sizeof(QuestionReponse));
    }
   
   
}
 
void main (){
 
  printf("fais qqq chose connard" );
  RemplirTabStruct ();
  printf("je me fou de ta geule violement" );
  printf(" %s \n", tabStruct-> expReg);
  printf("j en ai marre" );
 
}

mood
Publicité
Posté le 09-01-2005 à 00:05:50  profilanswer
 

n°949392
Taz
bisounours-codeur
Posté le 09-01-2005 à 00:11:41  profilanswer
 

ça plante ou ? tu compiles en -Wall ? utilise gdb

n°949395
Chewbye
Posté le 09-01-2005 à 00:19:40  profilanswer
 

Ben tout le probleme et que ca plante directement en me faisant un segmentation fault... il affiche rien (alors que mes affichage devrait se faire.....).
c'est quoi gdb?
euh, a priori nan je compile pas en -wall je vais essayer

n°949419
SBAM
Best recording of rach 3.
Posté le 09-01-2005 à 16:34:14  profilanswer
 

Chewbye a écrit :

Ben tout le probleme et que ca plante directement en me faisant un segmentation fault... il affiche rien (alors que mes affichage devrait se faire.....).
c'est quoi gdb?
euh, a priori nan je compile pas en -wall je vais essayer


 
Essaye en mettant un \n a la fin de tes printf  [:mr white]

n°949422
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 09-01-2005 à 16:37:22  profilanswer
 

Chewbye a écrit :

Ben tout le probleme et que ca plante directement en me faisant un segmentation fault... il affiche rien (alors que mes affichage devrait se faire.....).
c'est quoi gdb?
euh, a priori nan je compile pas en -wall je vais essayer


gdb est un debugger, ce que n'est pas ce forum :non:
c'est le genre d'erreur qui se trouve très facilement avec un tel outil


---------------
J'ai un string dans l'array (Paris Hilton)
n°949425
compuman10​1
Posté le 09-01-2005 à 16:40:11  profilanswer
 

huhuhuh ca sent le projet de C en Fiifo :p

n°949439
ToxicAveng​er
Posté le 09-01-2005 à 17:09:09  profilanswer
 

si tu cherches même pas avec le debugger, t'es pas rendu...

n°949499
allawos
Posté le 09-01-2005 à 18:16:05  profilanswer
 

Tu peux aussi ajouter l'instruction :
fflush(stdout);
après chacun de tes printf.
Comme ca ,t'es sur que s'ils ne s'affichent pas, c'est que ca plante avant. Si tu mets pas ca (peut-etre que le \n fait la même chose, je sais pas), ben ca peut planter après ton printf sauf qu'il n'a pas le temps de s'afficher. Avec le fflush, il est d'abord affiché avant de passer à l'instruction suivante.

n°949512
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 09-01-2005 à 18:33:13  profilanswer
 

allawos a écrit :

Tu peux aussi ajouter l'instruction :
fflush(stdout);
après chacun de tes printf.
Comme ca ,t'es sur que s'ils ne s'affichent pas, c'est que ca plante avant. Si tu mets pas ca (peut-etre que le \n fait la même chose, je sais pas), ben ca peut planter après ton printf sauf qu'il n'a pas le temps de s'afficher. Avec le fflush, il est d'abord affiché avant de passer à l'instruction suivante.


mettre un '\n' déclenche aussi le fflush :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°949927
db__
spécialiste de l'à peu près
Posté le 10-01-2005 à 13:02:06  profilanswer
 

Il est vivement conseillé de tester les retours de fonctions fopen et malloc. Tenter de lire un fichier qui n'a pas été ouvert ou écrire dans de la mémoire qui n'a pas été alloué provoque en général un segmentation fault.
La fonction puts permet d'écrire une chaine avec un retour à la ligne sans le \n final, ce qui est pratique pour les messages de débogage. ex: puts ("coucou" );


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Segmentation fault en C à la premiére ligne du programme :(

 

Sujets relatifs
[CSS] Menu horizontal 1 ligne style www.macromedia.com ???aide pour un programme en C (TARJAN)
Chargement d'un programme en mémoirecomment lancer son programme au démarrage
[VC++] Utiliser TRACE dans un programme Win32tableau triable en ligne
tableau triable en ligneProgramme pour automatiser une connexion a une site tt les 0.1 seconde
Retour à la ligne smartmailScript qui marche en local mais pas en ligne
Plus de sujets relatifs à : Segmentation fault en C à la premiére ligne du programme :(


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR