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 averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Par défaut erreur de segmentation
    Bonjoir !
    j'ai un erreur de ségmentation qui est causé par cette ligne de code :

    int ifetch=atoi(argv[1]);
    je ne sais pas pourquoi !! ni c quoi ""atoi"" ne je le trouve pas dans le programme c'est une des fonction connu comme malloc ?
    pouvez vous m'aider comment je résoud le problem !
    meme un petit pointeur vers une paragraphe qui explique ca !
    merci !

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par debutant-1
    Bonjoir !
    j'ai un erreur de ségmentation qui est causé par cette ligne de code :

    int ifetch=atoi(argv[1]);
    je ne sais pas pourquoi ni c quoi ""atoi"" ni le argv je le trouve pas dans le programme sont 'il des fonction connu comme malloc ?
    pouvez vous m'aider comment je résoud le problem !
    meme un petit pointeur vers une paragraphe qui explique ca !
    merci !
    - atoi n'est plus à utiliser, à la place, utiliser strtol...

    - argv est le premier argument de la ligne de commande, il faut vérifier si le nombre d'arguments de la ligne de commande est supérieur à 1...

    Jc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Par défaut
    il declare la fonction main comme ca :
    int main(int argc, char* argv[])

    comment je peut verifier que que le nombre de ligne de commande est superieur a 1?
    merci !

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par debutant-1
    int main(int argc, char* argv[])
    argc correspond au nombre d'argument, sachant qu'il y a toujours au moins un argument (généralement la commande tapée pour lancer le programme)

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par debutant-1
    comment je peut verifier que que le nombre de ligne de commande est superieur a 1?
    merci !
    (le nombre d'arguments, pas le nombre de lignes de commande )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (argc > 1) {
       /* il y a au moins 1 argument*/
    }
    Il faut savoir que le premier argument est le nom du programme, donc si ya 2 arguments, argc vaut 3 et le 2ème argument est accessible via argv[2]

  6. #6
    Membre chevronné
    Avatar de NewbiZ
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (argc==2) // exactement 1 argument
    {
         int i = strtol(argv[1], NULL, 0);
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Par défaut
    j'arrive pas à suivre !
    premierement : si le nom du programme est le premier argument (qui est par dephot a.out ) il doit correspendre à argv[0] ???
    les autre argument sont les autre fichier execitable c ca ??
    et atoi ou strtol elle font quoi exactement ??
    il y a pas un petit cours dessu !!??
    merci tous pour votre aide !

  8. #8
    Membre chevronné Avatar de Rei Angelus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 292
    Par défaut
    Citation Envoyé par debutant-1
    j'arrive pas à suivre !
    premierement : si le nom du programme est le premier argument (qui est par dephot a.out ) il doit correspendre à argv[0] ???
    argv[0] correspond bien au nom du programme puisque en C le 1er élément d''un tableau a pour indice 0.

    Citation Envoyé par debutant-1
    les autre argument sont les autre fichier execitable c ca ??
    Non, ce sont les paramètres que tu passes en entrée de ton programme.

    Citation Envoyé par debutant-1
    et atoi ou strtol elle font quoi exactement ??
    il y a pas un petit cours dessu !!??
    merci tous pour votre aide !
    Ils servent à convertir une chaine de caractère en entier.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Par défaut
    dans ce cas tt est en regle pourquoi il me fait erreur de segmentation a ce niveau :

    int main(int argc, char* argv[])

    {

    /**arguments**/
    int ifetch=atoi(argv[1]); //nombre d'entree lues // <===
    int ruu=atoi(argv[2]); //fenetre d'execution

  10. #10
    Membre chevronné Avatar de Rei Angelus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 292
    Par défaut
    1) Que passes-tu comme paramètres d'entrée à ton programme?

    2) De plus, je rejoins ce que dit fearyourself : "atoi n'est plus à utiliser, à la place, utiliser strtol...". Le atoi est à éviter voire proscire !!!

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    tu vérifies que argc >= 3 ?
    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.

  12. #12
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par debutant-1
    dans ce cas tt est en regle pourquoi il me fait erreur de segmentation a ce niveau :
    Comment tu exécute ton programme ?

    Tu ne vérifie toujours pas le nombre d'argument et tu utilise atoi à la place de strtol

  13. #13
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par debutant-1
    dans ce cas tt est en regle pourquoi il me fait erreur de segmentation a ce niveau :
    Tu ne vérifies pas si le nombre d'arguments est correct. On ne sait pas comment tu appelles le programme. Si il y a une erreur, argv[n] retourne NULL, ce qui provoque un comportement indéfini quand il est passé à atoi().

    On te l'a déjà dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (argc > 2) /* EDIT */
    {
       int ifetch = strtol(argv[1], NULL, 10); //nombre d'entree lues // <===
       int ruu = strtol(argv[2], NULL, 10); //fenetre d'execution
    }
    else
    {
       help();
    }

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Par défaut
    Citation Envoyé par Rei Angelus
    1) Que passes-tu comme paramètres d'entrée à ton programme?
    comment je peut le savoir ! car mon programme sa fonction est d'executé des fonction sur un terminal (lancer d'autre programme sou linux) et puis deriger les resultat vers d'autre fichier !!
    je ne vois pas les parametre à entrer !

  15. #15
    Membre chevronné Avatar de Rei Angelus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 292
    Par défaut
    Dans ce cas, pour commencer :
    Citation Envoyé par Emmanuel Delahaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (argc >= 2)
    {
       int ifetch = atoi(argv[1]); //nombre d'entree lues // <===
       int ruu = atoi(argv[2]); //fenetre d'execution
    }
    else
    {
       help();
    }

  16. #16
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par debutant-1
    comment je peut le savoir !
    En testant argc.
    1 : pas de paramètre
    2 : 1 paramètre
    3 : 2 paramètres etc.

    (Je corrige mon code)

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Par défaut
    oui j'ai fait la petit ""if ""devant les declaration et ca ma donner un resultat negatif!
    donc le nombre d'argument est inferieur a duex !
    il manque des argument ! mais je ne sais pas les quel !

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    En testant argc.
    1 : pas de paramètre
    2 : 1 paramètre
    3 : 2 paramètres etc.

    (Je corrige mon code)
    j'ai verifier il y a un parametre et pas 2

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par debutant-1
    oui j'ai fait la petit ""if ""devant les declaration et ca ma donner un resultat negatif!
    donc le nombre d'argument est inferieur a duex !
    il manque des argument ! mais je ne sais pas les quel !
    Peu importe. Tu dois le signaler à l'utilisateur et stopper l'exécution (ou utiliser des valeurs par défaut...).

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Peu importe. Tu dois le signaler à l'utilisateur et stopper l'exécution (ou utiliser des valeurs par défaut...).
    ou je les met les valeur par défaut !?
    tu veux dire j'initialise argv[1]='f' par exemple ......
    ce que je ne comprend pas les parametre je peut les lire ou ? si elle ne sont pas d'autre fichier comme argv[0] qui est en generale a.out ! les autre argv[i] je peut les connaitre comment ?
    y a il un bon cours qui peut m'expliqué ca ?
    merci pour votre patience !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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