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 :

Que signifie cette erreur de compilation ?


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Que signifie cette erreur de compilation ?
    Bonjour,

    lorsque je compile le code suivant, j'ai cette erreur à la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    parse_trace.c:9: erreur: stray ‘\160’ in program
    parse_trace.c:9: erreur: stray ‘\160’ in program
    La ligne 9 est celle en gras

    Qu'est-ce que ça signifie ?

    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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
    
    #define F "fichier"
    
    typedef struct{
      unsigned char ip[4];   
    }t_ip;
    
    typedef struct{
      t_ip *tabIP;
      size_t nbIP;
      size_t sizeIP;
    }t_route;
    
    
    static void purge(FILE *fp)
    {
      int c;
      while ((c = fgetc(fp)) != '\n' && c != EOF)
        {
        }
    }
    
    static void clean (char *s, FILE *fp)
    {
      char *p = strchr (s, '\n');
      if (p != NULL)
        {
          *p = 0;
        }
      else
        {
          purge (fp);
        }
    }
    
    
    int main()
    {
      FILE *fp = fopen(F, "r");
      t_route trace;
      trace.tabIP = NULL;
      trace.nbIP = 0;
      trace.sizeIP = 0;
      int j = 0;
      
      if (fp != NULL)
        {
          char line[BUFSIZ];
          
          while (fgets(line, sizeof line, fp) != NULL)
        {
          clean(line, fp);
          
          char *p = strtok(line, " ");
          if (p != NULL)
            {
              p = strtok(NULL, " ");
              if (p != NULL)
            {
              if(trace.nbIP == trace.sizeIP)
                {
                  trace.sizeIP += 1;
                  
                  trace.tabIP = realloc(trace.tabIP, (trace.sizeIP) * sizeof(*trace.tabIP));
                  if (trace.tabIP == NULL)
                {
                  perror("erreur allocation");
                  exit(1);
                }
                }
              
              char ip[4];
              sscanf(p, "%d.%d.%d.%d", ip, ip + 1, ip + 2, ip + 3);
              
              trace.tabIP[trace.nbIP].ip[0] = ip[0];   
              trace.tabIP[trace.nbIP].ip[1] = ip[1];
              trace.tabIP[trace.nbIP].ip[2] = ip[2];
              trace.tabIP[trace.nbIP].ip[3] = ip[3];
              
              trace.nbIP++;  
              
            }  
              else
            {
              printf ("format error\n");
              break;
            }
            }
          else
            {
              printf ("format error\n");
              break;
            }
        }
          fclose (fp), fp = NULL;
        }
      else
        {
          perror (F);
        }
      
      for(j=0; j<trace.sizeIP; j++)
        {
          printf("%d.%d.%d.%d ",trace.tabIP[j].ip[0],trace.tabIP[j].ip[1],
             trace.tabIP[j].ip[2],trace.tabIP[j].ip[3]);
          printf("\n");
        }
      
      return 0;
    }

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Premium
    Bonjour,

    lorsque je compile le code suivant, j'ai cette erreur à la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    parse_trace.c:9: erreur: stray ‘\160’ in program
    parse_trace.c:9: erreur: stray ‘\160’ in program
    La ligne 9 est celle en gras

    Qu'est-ce que ça signifie ?
    Tu dois avoir un espace insécable à cette ligne.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Tu dois avoir un espace insécable à cette ligne.
    J'ai effacé la structure que j'avais écrit et le problème a disparu.

    J'obtiens maitenant une erreur de segmentation à l'execution

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Premium
    J'ai effacé la structure que j'avais écrit et le problème a disparu.

    J'obtiens maitenant une erreur de segmentation à l'execution
    Effacé et réécrit, je suppose ?

    Montre un exemple de fichier à traiter qui fait planter.

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Effacé et réécrit, je suppose ?
    Oui

    Montre un exemple de fichier à traiter qui fait planter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     1  192.168.0.1  9.754 ms  9.461 ms  8.046 ms
     2  195.6.244.14  60.885 ms  48.924 ms  90.517 ms
     3  194.206.126.244  50.503 ms  48.97 ms  120.122 ms
     4  194.206.126.2  55.655 ms  52.213 ms  58.908 ms
     5  208.213.229.130  588.303 ms  589.843 ms  589.611 ms
     6  208.213.229.129  599.564 ms  599.763 ms  600.749 ms
     7  208.213.229.226  629.167 ms  599.284 ms  599.383 ms
     8  195.10.40.34  599.152 ms  599.289 ms  631.011 ms
     9  157.130.34.217  642.326 ms  715.072 ms  653.724 ms
    10  146.188.160.62  595.143 ms  590.433 ms  659.247 ms
    11  146.188.160.181  649.863 ms  700.901 ms  617.067 ms
    12  137.39.253.86  600.835 ms  599.379 ms  590.867 ms
    13  192.48.96.9  607.071 ms  589.221 ms  603.156 ms

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Premium
    Oui
    Je n'ai pas de plantage. Le code est correct (bien qu'améliorable)

    Tu fais une réallocation à chaque ligne, c'est pas très efficace...

  7. #7
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Je n'ai pas de plantage. Le code est correct (bien qu'améliorable)
    A l'execution tu obtiens la liste des IP ? en utilisant le code tel quel?
    J'obtiens toujours une erreur de segmentation lorsque j'éxecute le programme

    Tu fais une réallocation à chaque ligne, c'est pas très efficace...
    J'ai pensé a doublé la taille à chaque fois mais des cases du tableau pourrais rester vide

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Premium
    A l'execution tu obtiens la liste des IP ? en utilisant le code tel quel?
    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
    192.168.0.1
    195.6.244.14
    194.206.126.244
    194.206.126.2
    208.213.229.130
    208.213.229.129
    208.213.229.226
    195.10.40.34
    157.130.34.217
    146.188.160.62
    146.188.160.181
    137.39.253.86
    192.48.96.9
     
    Press ENTER to continue.
    J'obtiens toujours une erreur de segmentation lorsque j'éxecute le programme
    Ca doit venir d'ailleurs...
    J'ai pensé a doublé la taille à chaque fois mais des cases du tableau pourrais rester vide
    C'est pas grave...

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Est-ce que tu pourrais mettre en pièce jointe le fichier qui t'as servi pour la compilation ?

    Merci

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Premium
    Est-ce que tu pourrais mettre en pièce jointe le fichier qui t'as servi pour la compilation ?
    C'est le code que tu as publié.

    http://www.developpez.net/forums/sho...70&postcount=1

  11. #11
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Bonjour,

    Alors en faite, j'obtenais une erreur de segmentation car je n'avais pas alloué le tableau trace.tabIP. C'est chose faite mais l'erreur de segmentation persiste.
    Avec le dedoggueur, j'obtiens ce message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Program received signal SIGSEGV, Segmentation fault.
    0x0804883c in main ()
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
    
    #define F "fichier"
    
    typedef struct{
      unsigned char ip[4];
    }t_ip;
    
    typedef struct{
      t_ip *tabIP;
      size_t nbIP;
      size_t sizeIP;
    }t_route;
    
    static void purge(FILE *fp){
      int c;
      while((c = fgetc(fp)) != '\n' && c != EOF){}
    }
    
    static void clean(char *s, FILE *fp){
      char *p = strchr(s, '\n');
      if(p != NULL){
        *p = 0;
      }
      else{
        purge(fp);
      }
    }
    
    int main(){
      FILE *fp = fopen(F, "r");
      t_route trace;
      trace.nbIP = 1;
      trace.sizeIP = 1;
      size_t j;
    
      trace.tabIP = malloc((trace.nbIP) * sizeof(t_ip));
      if(trace.tabIP == NULL)
        {
          perror("erreur allocation\n");
          exit(1);
        }
      
      if (fp != NULL)
        {
          char line[BUFSIZ];
          while (fgets(line, sizeof line, fp) != NULL)
        {
          clean(line, fp);char *p = strtok(line, " ");
          if (p != NULL)
            {
              p = strtok(NULL, " ");
              if (p != NULL)
            {
              if(trace.nbIP == trace.sizeIP)
                {
                  trace.sizeIP *= 2;
                  
                  trace.tabIP = realloc(trace.tabIP, (trace.sizeIP) * sizeof(*trace.tabIP));
                  if (trace.tabIP == NULL)
                {
                  perror("erreur allocation\n");
                  exit(1);
                }
                }
              
              char ip[4];
              sscanf(p, "%d.%d.%d.%d", ip, ip + 1, ip + 2, ip + 3);
              
              trace.tabIP[trace.nbIP].ip[0] = ip[0];
              trace.tabIP[trace.nbIP].ip[1] = ip[1];
              trace.tabIP[trace.nbIP].ip[2] = ip[2];
              trace.tabIP[trace.nbIP].ip[3] = ip[3];
              
              trace.nbIP++;  
              
            }  
              else
            {
              printf ("format error\n");
              break;
            }
            }
          else
            {
              printf ("format error\n");
              break;
            }
        }
          fclose (fp), fp = NULL;
        }
      else
        {
          perror (F);
        }
      
      for(j=0; j<trace.nbIP; j++)
        {
          printf("%d.%d.%d.%d ",trace.tabIP[j].ip[0],trace.tabIP[j].ip[1],
             trace.tabIP[j].ip[2],trace.tabIP[j].ip[3]);
          printf("\n");
        }
      
       free(trace.tabIP);
      
      return 0;
    }

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Premium
    l'erreur de segmentation persiste.
    Avec le dedoggueur, j'obtiens ce message :
    [code]Program received signal SIGSEGV, Segmentation fault.
    0x0804883c in main ()
    Pas de problème chez moi. Essaye d'isoler le bout de code qui provoque l'erreur...

  13. #13
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    C'est ici que ça pose problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Program received signal SIGSEGV, Segmentation fault.
    0x0804881c in main () at parse_trace.c:73
    73                        trace.tabIP[trace.nbIP].ip[0] = ip[0];
    J'ai mis en gras sur le code précédent

  14. #14
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Tu tape après le dernier element alloué. Les tableaux commencent à 0 pas à 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
              trace.tabIP[trace.nbIP-1].ip[0] = ip[0];
              trace.tabIP[trace.nbIP-1].ip[1] = ip[1];
              trace.tabIP[trace.nbIP-1].ip[2] = ip[2];
              trace.tabIP[trace.nbIP-1].ip[3] = ip[3];
    Et à la fin, c'est a mon avis de 0 à trace.nbIP-1 qu'il te faut faire le for.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par D[r]eadLock
    Tu tape après le dernier element alloué. Les tableaux commencent à 0 pas à 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct{
      unsigned char ip[4];
    }t_ip;
    <...>
              trace.tabIP[trace.nbIP-1].ip[0] = ip[0];
              trace.tabIP[trace.nbIP-1].ip[1] = ip[1];
              trace.tabIP[trace.nbIP-1].ip[2] = ip[2];
              trace.tabIP[trace.nbIP-1].ip[3] = ip[3];
    Je vois 2 tableaux de 4 et un indice de 0 à 3. Rien de bizarre...

    Ah, tu parles de trace.nbIP-1 ? C'est vrai qu'il est chelou celui-là... M'en vais l'assertiser ...

    EDIT: ARF! J'ai pas de -1 dans ma version ! :

    (en fait je l'avais amélioré comme ça : )
    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
     
                   {
                      char ip[4];
                      int n = sscanf(p, "%d.%d.%d.%d", ip, ip + 1, ip + 2, ip + 3);
                      if (n == 4)
                      {
                         trace.tabIP[trace.nbIP].ip[0] = ip[0];
                         trace.tabIP[trace.nbIP].ip[1] = ip[1];
                         trace.tabIP[trace.nbIP].ip[2] = ip[2];
                         trace.tabIP[trace.nbIP].ip[3] = ip[3];
                      }
                      else
                      {
                         printf ("format error\n");
                         break;
                      }
                   }
                   trace.nbIP++;
    mais je n'ai jamais retiré de -1 !

Discussions similaires

  1. RunJasperReports : que signifie cette erreur ?
    Par clavier12AZQSWX dans le forum Général Java
    Réponses: 2
    Dernier message: 05/03/2010, 23h14
  2. Que signifie cette erreur ?
    Par stilgar_karas dans le forum wxWidgets
    Réponses: 2
    Dernier message: 14/12/2009, 12h26
  3. Que signifie cette erreur
    Par BuzzLeclaire dans le forum Langage
    Réponses: 2
    Dernier message: 26/06/2009, 13h13
  4. [SQL-Server] 'Bad column offset' que signifie cette erreur ?
    Par dor_boucle dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 08/02/2006, 15h01
  5. [SQL][DERBY] Que signifie cette erreur ?
    Par irenee dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/12/2005, 14h34

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