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

Linux Discussion :

Segmentation Fault (argc argv)


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de tidou95220
    Homme Profil pro
    BI junior
    Inscrit en
    Novembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BI junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2008
    Messages : 263
    Par défaut Segmentation Fault (argc argv)
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    #include <stdlib.h>
     
    void    my_putchar(char c)
    {
      write(1 ,&c, 1);
    }
     
    int     my_put_nbr(int n)
    {
      int   fin;
      int   debut;
     
      if (n < 0)
        {
          my_putchar('-');
          my_put_nbr(-n);
        }
      else
        {
          fin = n % 10;
          debut = n / 10;
          if (debut !=0)
            my_put_nbr(debut);
          my_putchar(fin + '0');
        }
    }
     
    int     my_calc(int nb1, int nb2)
    {
      int   res;
      res = nb1 + nb2;
      return(res);
    }
     
    int     my_getnbr(char *str)
     
    {
      int result;
      int   fact_mult;
      int i;
     
      fact_mult = 1;
      result = 0;
      i = strlen(str) - 1;
      while (i >= 0)
        {
          result = result + (fact_mult *(i - '0')) ;
          fact_mult *= 10;
          i--;
          return (result);
     
        }
    }
     
    int     my_strlen(char *str)
    {
      int result;
      result = 0;
      while (str[result] != '\0')
        {
          result++;
        }
      return (result);
    }
     
    int     main(int ac,char **av)
    {
      my_calc((my_getnbr(av[1])), (my_getnbr(av[3])));
    }
    je comprend pas mon segfault :s il faut que je malloc ?...

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Je ne sais pas comment tu invoques ton programme, mais tu es sûr que ce n'est pas av[2] plutôt que av[3] ?

    Quand tu pose une question sur un forum il est de bon ton de donner le programme minimal qui permet de reproduire l'erreur, et de donner toutes les informations pour le reproduire. Là tu postes un tas de trucs inutiles, et on ne sait même pas comment tu utilises ton programme.

    Tu sais qu'il y a déjà des fonctions dans la libc qui font la convertion d'une chaine en entier. Regarde strtol par exemple.

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Tout d'abord, je te conseille de corriger ton code, afin qu'il compile sans erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $> gcc -Wall -W -ansi -O2 developpez.c -o developpez
    developpez.c: In function `my_putchar':
    developpez.c:5: warning: implicit declaration of function `write'
    developpez.c: In function `my_put_nbr':
    developpez.c:26: warning: control reaches end of non-void function
    developpez.c: In function `my_getnbr':
    developpez.c:44: warning: implicit declaration of function `strlen'
    developpez.c:53: warning: control reaches end of non-void function
    developpez.c: In function `main':
    developpez.c:66: warning: unused parameter `ac'
    developpez.c:69: warning: control reaches end of non-void function
    Ensuite, ton code n'est pas clair. Peux-tu préciser ce que tu souhiatais faire et que sont censées faire les focntions que tu as écrites ?

    Enfin, main n'a que deux prototypes possibles :
    • int main(void)
    • int main (int argc, char ** argv)
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Ce qui me choque un peu plus dans ton code est que tu fais un return
    dans ta boucle while (fonction my_getnbr). Du coup, t'auras une itération. !!
    Est ce que tu pourrais détailler ce que tu voulais faire stp?

Discussions similaires

  1. Pb segmentation fault avec glutinit()
    Par pipistrelle dans le forum GLUT
    Réponses: 2
    Dernier message: 17/11/2004, 23h17
  2. [SDL_Image] Img_Load : segmentation fault ....
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 19/10/2004, 23h52
  3. [REDHAT] Segmentation fault systematique
    Par mela dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 21/09/2004, 06h05
  4. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  5. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43

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