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


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut Erreur de segmentation
    Bonsoir,

    Mon programme se plante.
    En plus, quand je tente de le débôguer, un message d'erreur de segmentation apparaît. Je sais que cette erreur a lieu quand on tente de pénétrer dans une zone mémoire interdite => problème de pointeur. Donc j'ai décidé de déclarer toutes les chaînes de caractères via les crochets car avant je les avais déclarées comme pointeurs Mais ceci n'a pas servit: il m'affiche la même erreur sans indiquer sa cause. (L'unique "*" qui apparaît dans le code est celle de la déclaration des fichiers).
    Pourriez_vous m'aider ?

    Cordialement,
    yo_haha

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 521
    Par défaut
    Citation Envoyé par yo_haha Voir le message
    Je sais que cette erreur a lieu quand on tente de pénétrer dans une zone mémoire interdite => problème de pointeur.
    C'est un raccourci un peu trop rapide.

    Donc j'ai décidé de déclarer toutes les chaînes de caractères via les crochets car avant je les avais déclarées comme pointeurs Mais ceci n'a pas servit: il m'affiche la même erreur sans indiquer sa cause.
    L'erreur de segmentation est une erreur à l'exécution, pas à la compilation, et il s'agit d'un hola posé par le microprocesseur lui-même, mettant fin à un programme fautif. Autrement dit, c'est un plantage. C'est donc normal que tu n'obtiennes pas de message d'erreur.

    Le programme peut en lui-même être valide dans les gammes de mémoire dans lequel il est censé travailler mais ne pas savoir où s'arrêter. Ce dernier problème est soit à une erreur dans la définition de tes boucles, soit à l'absence en mémoire du marqueur censé repérer la fin de ta chaîne (sentinelle).

    En tout état de cause, tes extraits ne sont pas suffisants (ce n'est pas dans ce que tu nous montres que l'erreur se trouve). Montre-nous ton code, et spécialement les endroits où tu définis tes chaînes, et ceux où tu les exploites.

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Tableaux et pointeurs sont deux choses très différentes. La taille d'un tableau est égale à la taille d'un élément multiplié par le nombre d'éléments qu'il peut contenir. Il y a donc assez de place dans un tableau pour contenir différentes valeurs. Un pointeur est une variable qui sert à contenir une adresse. Sa taille est égale à la taille requise pour représenter une adresse. On ne peut donc mettre qu'une adresse dans un pointeur, pas autre chose. Il faut commencer par apprendre le C avant de l'utiliser ^^.

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    fscanf(f, "%f", prix_1);
    ...
    Il va falloir changer beaucoup de choses ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    fscanf(f, "%f", &prix_1);
    ...
    Fais toutes les modifs nécessaires. Pour nom_1, tu n'as pas besoin de mettre le & (en fait tu ne dois pas le mettre) devant car nom_1 dans de telles situations, le nom d'un tableau est converti par le compilateur en l'adresse de son premier élément. Voir tutos, FAQ, etc.

    A par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Organiser(char fichier[10], char fichier_1[10])
    {
        ...
    }
    10 ici ne sert à rien car on ne peut pas mettre un tableau en argument d'une fonction. Une telle écriture sera donc toujours par le compilateur en : char * fichier, char * fichier_1, etc. Voir tutos, FAQ ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    do {
        f = fopen(fichier, "r"); 
        if (!f) 
            printf("\aERREUR: Impossible d'ouvrir le fichier: %s.\n", fichier);
    } while (!f);
    Si fopen échoue, on entre dans une très probable boucle infinie ...

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut
    Que me recommandez-vous pour l'ouverture du fichier? Je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f = fopen(fichier, "r");
    Est-ce correcte (et suffisant)?

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    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
    f = fopen(...);
     
    if (f != NULL)
    {
        /* C'est bon, on peut continuer */
     
        ...
     
        /* On ferme le fichier */
     
        fclose(f);
    }
    else
    {
        /* Traitement de l'erreur */
    }

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut
    Merci beaucoups!

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut
    Pourriez-vous m'indiquer où je peux me renseigner sur la suppression logique d'une chaîne ou d'un caractère à partir d'un fichier?

Discussions similaires

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

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