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
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut Erreur de segmentation
    Bonjour,

    Je compile mon programme en faisant un make
    lorsque j'execute mon programme, j'obtiens une erreur de segmentation
    Avec gdb, j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Program received signal SIGSEGV, Segmentation fault.
    0xb7e52c20 in strcpy () from /lib/tls/i686/cmov/libc.so.6
    Quel est le problème ?

    Merci par avance

    VerifIP, vérifies si une IP est correcte avant de la mettre dans le tableau

    le seul fichier code ou j'utilise strcpy est celui-ci
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
    
    #include "verifIP.h"
    #include "parsing.h"
    
    #define F "fichier"
    
    void purge(FILE *fp)
    {
      int c;
      while ((c = fgetc(fp)) != '\n' && c != EOF)
        {
        }
    }
    
    void clean (char *s, FILE *fp)
    {
      /* search ... */
      char *p = strchr (s, '\n');
      if (p != NULL)
        {
          /* ... and kill */
          *p = 0;
        }
      else
        {
          purge (fp);
        }
    }
    
    char **parsing(FILE *fp)
    {
      char **tab;
      int nb = 0 ,size = 5;
      
      tab = malloc (size * sizeof * tab);
      if(tab == 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(nb == size)
    		    {
    		      size += 16;
    		      
    		      tab = realloc(tab, size * sizeof *tab);
    		      if (tab == NULL)
    			{
    			  perror("erreur allocation\n");
    			  free(tab); tab = NULL;
    			  return tab;
    			}
    		    }
    		  int ip[4];
    		  int n = sscanf(p,"%d.%d.%d.%d",ip,ip+1,ip+2,ip+3);
    		  if(n == 4)
    		    {
    		      tab[nb] = malloc((strlen(p)+1) * sizeof * tab[nb]);
    		      if (tab[nb] == NULL)
    			{
    			  perror("erreur allocation\n");
    			  free(tab); tab = NULL;
    			  return tab;
    			}
    		      if(!correctIP(p))
    			{
    			  strcpy(tab[nb],p);
    			  nb++;
    			}
    		    }
    		}
    	      
    	      else
    		{
    		  printf ("format error\n");
    		  break;
    		}
    	    }
    	  else
    	    {
    	      printf ("format error\n");
    	      break;
    	    }
    	}
          fclose (fp), fp = NULL;
          tab[nb] = NULL;
        }
      else
        {
          perror (F);
        }
      assert (fp == NULL);
      return tab;  
    }

  2. #2
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    C'est quoi "p" ?

    [edit] Pardon je viens de le trouver.
    p.s. les declarations en milieu de bloc saymal
    [/edit]

  3. #3
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu n'a pas alloué de taille pour tab[nb];
    Il faut alloué pour chaque case de ton tableau.

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par Skyrunner
    Tu n'a pas alloué de taille pour tab[nb];
    Il faut alloué pour chaque case de ton tableau.
    Salut,
    j'ai alloué une taille pour tab[nb]
    Dans le code, je fais bien tab[nb] = malloc(...)

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    J'ai rien dis alors...

    Et ca plante au premier passage? aléatoirement? toujours au même moment?

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par Skyrunner
    J'ai rien dis alors...

    Et ca plante au premier passage? aléatoirement? toujours au même moment?
    avec gdb, l'erreur est toujours signalé au même endroit

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Premium
    avec gdb, l'erreur est toujours signalé au même endroit
    Oui mais à quel moment?
    Place un printf avant le strcpy pour voir.

  8. #8
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Salut,

    en faite mon problème était tout simple, j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(!correctIP(p))
    			{
    			  printf("copie de l'element\n");
    			  strcpy(tab[nb],p);
    			  nb++;
    			}
    alors qu'il me fallait if(correctIP(p))

+ Répondre à la discussion
Cette discussion est résolue.

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