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 :

erreur de segmentation compilateur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 81
    Par défaut erreur de segmentation compilateur
    bonsoir !!
    voici une fonction que j'ai créer pour insrer un IDF dans ma table des symbole mais lors de son utilisation elle me retourne erreur de segmentation je pense que c'est due au STRCPY
    voici le code
    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
    void insert(char *entite, char *type){
    liste p= recherche(entite);
    /* creation d'un noeud */
    if (p == NULL) {
    p = (liste) malloc(sizeof(elem));
    p->entite= (char*)malloc(sizeof(char)*strlen(entite));
    strcpy(p->entite,entite);
    p->type=type;
    p->ligneA=nbrligne;
    p->svt=NULL;
     
    /* insertion du noeud en tête de liste (LIFO) */
    p->svt = table_symboles;
    table_symboles = p;
    }
    }
    je fait appel a cette fonction au niveau bison
    merci de m'aider a trouver l'erreur

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lucastof Voir le message
    bonsoir !!
    voici une fonction que j'ai créée pour insrer un IDF dans ma table des symbole mais lors de son utilisation elle me retourne erreur de segmentation je pense que c'est dû au STRCPY
    voici le code
    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
    void insert(char *entite, char *type){
    liste p= recherche(entite);
    /* creation d'un noeud */
    if (p == NULL) {
    p = (liste) malloc(sizeof(elem));
    p->entite= (char*)malloc(sizeof(char)*strlen(entite));
    strcpy(p->entite,entite);
    p->type=type;
    p->ligneA=nbrligne;
    p->svt=NULL;
    
    /* insertion du noeud en tête de liste (LIFO) */
    p->svt = table_symboles;
    table_symboles = p;
    }
    }
    je fait appel a cette fonction au niveau bison
    merci de m'aider a trouver l'erreur
    Salut
    Si tu avais réfléchi un minimum à ton code pendant que tu le tapais, tu te serais rendu compte que strlen("toto") renvoie 4 alors que "toto" prend 5 octets en mémoire !!!

    Accessoirement, je sens ce code super pas propre. Du malloc non vérifié, de la variable globale (table_symboles)... bref cette erreur ci va être vite résolue mais à terme...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 81
    Par défaut
    salut merci pour votre réponse !!
    c'est vrai ce code n'est pas si propre je promet de le nétoyer dés que j'ai fini
    alors pour le malloc je dois juste multiplier le tous par 100 environ pour étre sur de ne pas depasser la capacité de p->entite.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 81
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p->entite= (char*)malloc(sizeof(char)*strlen(entite)*100);
    comme ceci ??

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lucastof Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p->entite= (char*)malloc(sizeof(char)*strlen(entite)*100);
    comme ceci ??
    Ouais. Mais pour être sûr, moi je multiplierais par 10000 !!!

    Laisse-moi deviner... tu ne bosserais pas chez Micro$oft ???

    Sans déconner, est-ce que tu connais les bases ??? Sais-tu comment sont stockées les chaines de caractères ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 81
    Par défaut
    Microsoft!! ben non tu vois je ne sais méme pas utiliser strcpy() et strlen() enfin je debute tu vois et lorsque j'essaye d'en apprendre un peut je tombe sur toi qui a ce que je vois t'es encient sur le forum dailleur je ne comprend pas comment t arrivé a Expert Confirmé Sénior vu qu'au lieu d'aider des futures conféres au contraire tu te la joue devant eux !!
    en tous cas c'est la premiere fois que ça m'arrive sur ce forum, je sais qu'il y a des personnes qui m'aiderrons au lieu de se comporter comme toi !! merci quand méme !!

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lucastof Voir le message
    c'est vrai ce code n'est pas si propre je promet de le nétoyer dés que j'ai fini
    Non. Il faut faire du code propre dés le début. C'est galère après de retoucher la structure pour rajouter par exemple des contrôles d'erreur, tu risques de modifier par erreur quelque chose qui marchait et tout casser. En plus, si ton code est propre, ta phase de débugage n'en sera que plus courte et plus simple. Tu t'exposes à ca :
    Citation Envoyé par Sve@r
    bref cette erreur ci va être vite résolue mais à terme...
    Il a raison. Même si tu n'es pas content


    Citation Envoyé par lucastof Voir le message
    alors pour le malloc je dois juste multiplier le tous par 100 environ pour étre sur de ne pas depasser la capacité de p->entite.
    Le problème la dedans, c'est le environ. La zone qui t'es allouée n'a pas une taille d'environ X octets, mais bien de X octets. Pas un de plus, pas un de moins.

    Citation Envoyé par lucastof Voir le message
    Microsoft!! ben non tu vois je ne sais méme pas utiliser strcpy() et strlen() enfin je debute tu vois et lorsque j'essaye d'en apprendre un peut je tombe sur toi qui a ce que je vois t'es encient sur le forum dailleur je ne comprend pas comment t arrivé a Expert Confirmé Sénior vu qu'au lieu d'aider des futures conféres au contraire tu te la joue devant eux !!
    en tous cas c'est la premiere fois que ça m'arrive sur ce forum, je sais qu'il y a des personnes qui m'aiderrons au lieu de se comporter comme toi !! merci quand méme !!
    J'espère que ton niveau en C est meilleur que ton niveau en orthographe. Cela ne sert à rien de s'énerver et "d'insulter" quelqu'un qui t'aide. Sauf si tu ne veux plus d'aide. Si Sve@r t'a vexé, tu peux lui dire mais reste zen.

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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