Pages : 1
#1 Le 30/05/2006, à 18:31
- Premium
[C] 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 :
Program received signal SIGSEGV, Segmentation fault.
0xb7e52c20 in strcpy () from /lib/tls/i686/cmov/libc.so.6
Quel est le problème ?
Pourriez-vous m'aider à corriger mon code?
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
#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)
{
char *p = strchr (s, '\n');
if (p != NULL)
{
*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))
{
[b] strcpy(tab[nb],p);[/b]
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;
}
Hors ligne
Pages : 1