IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

probleme de segfault


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Par défaut probleme de segfault
    bonjour a tous

    alors voila mon programe avec des manipulation de fichier dont j'ai comme erreur : erreur de segmentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    FILE *tab=NULL;
    FILE *rep=NULL;
    FILE *file1,*file2,*file3;
    char *p = NULL ;
    char lecture[100],lit[100];
    char *param;
    char racine[100];
    char fp[100],fp2[100];
     
     
     
     param="/opt/local/proddm/newcat/niveaufin.tab";
    tab=fopen(param,"r"); 
    fgets(lecture,100,tab);
    strcpy ( racine, "/opt/local/proddm/newcat/");
    if ( (p = strchr(lecture, '\n')) != NULL )
           *p = '\0' ;
     
     
     strcpy(fp,racine); 
     strcat(fp,lecture);
     
     file1=fopen(fp,"r");     
     strcat(fp,"/cst");
     
     file2=fopen(fp,"r");
     strcpy(fp2,fp);
     
     strcat(fp,"/dxf.cst");
     file3=fopen(fp,"r");    
     
    while (!feof(tab))
      {
       if (file1==NULL || file2==NULL) 
          sprintf(lecture,"fond");	
       if (file3!=NULL) 
       {
     
       rep=fopen(fp,"r");
       } 
       else
       {
     
       strcat(fp2,"/couleur.cst");
       rep=fopen(fp2,"r");
       }
    fgets(lit,100,rep);
     
    }
    fclose(file1);
    fclose(file2);
    fclose(file3);
    fclose(rep);
    fclose(tab);
    }
    si quelqu'un a une idee de l'origine du probleme

    merci

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    C'est très confus, mais ce que je vois pour commencer, c'est que tu ne testes pas le retour de fopen(), et que tu n'emploies pas feof() correctement.

    De plus, param devrait être un const char *.

    PS: Et tes strcat() semblent générer au moins un chemin où le / intermédiaire est doublé.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Par défaut
    pour ce qui est du / intermediaire j'ai verifier et je ne l'est jamais double

    pour ce qui est du fopen je les tester c bon

    maintenant comment utiliser correctement la fonction feof()

  4. #4
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Appeler fopen() plusieurs fois dans une boucle while() n'est pas très malin....

  5. #5
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par acik59
    maintenant comment utiliser correctement la fonction feof()
    Il me semble qu'on en avait déjà parler dans un de tes posts : http://www.developpez.net/forums/sho...d.php?t=333757

    Une autre réponse dans la FAQ : ici

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par acik59
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     strcpy(fp,racine); 
     strcat(fp,lecture);
     
     file1=fopen(fp,"r");     
     strcat(fp,"/cst");
     
     file2=fopen(fp,"r");
     strcpy(fp2,fp);
     
     strcat(fp,"/dxf.cst");
     file3=fopen(fp,"r");
    Mis a part tout ce qui a deja ete signale (particulierement le test manaquant sur les ouvertures de fichiers), il y a un truc qui me chiffone dans ce que je vois au dessus, qu'essaies tu de faire exactement ?
    La j'ai l'impression (de la maniere dont sont construit les noms de fichier) que tu cherches a ouvrir des repertoires.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Par défaut
    pour le file 1 c'est en effet un test d'ouverture de repertoire!

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par acik59
    pour le file 1 c'est en effet un test d'ouverture de repertoire!
    file2 aussi non ?

    Sinon je doute fortement que fopen() sur un repertoire fonctionne bien. Et en plus c'est inutile, si un des repertoires n'existe pas, le fichier n'existera pas non plus (ben oui, ou le mettre) et son ouverture echouera.

    En outre, si ne ouverture a echouee, le pointeur vaut NULL et fclose(NULL) est un comportement indetermine (c'est probablement la cause de ton segfault)

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Par défaut
    pour les erreur de segmentation utilise gdb c'est mieux

Discussions similaires

  1. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  2. Réponses: 2
    Dernier message: 30/05/2002, 08h54
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo