|
|
|
|
Program received signal SIGSEGV, Segmentation fault. 0xb7e52c20 in strcpy () from /lib/tls/i686/cmov/libc.so.6
#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;
}
euh p est un pointeur à mon avis le probleme vient de la. |
Salut,
que proposes-tu de faire ? Il me semble qu'il y a aussi des problèmes au niveau de mes mallocs, comment les corriger? Merci |
Bonjour,
Bon, il y a effectivement un petit problème dans tes allocations. malloc renvoi un pointeur générique (non typé) void *malloc(size_t size) il faut impérativement casté le pointeur de retour !!! ce qui donne tab = (char *)malloc(sizeof(char)); et ça devrait fonctionner. Fais attention, cette définition sous entends que tu réaloues un emplacement mémoire à chaque fois que tu ajoutes un élément dans ton tableau. Remarque : je ne sais pas ce que c'est que cette allocation : tab = malloc (size * sizeof * tab); j'aimerais savoir à quoi sert le size. (tu le déclare dans toutes tes allocations). Remarque 2 : tres réallocations poseront problème. Pour être ludique je t'invite à aller voir les définitions dans les fichiers d'en tête que tu utilises (les prototypes des fonctions sont dans stdlib.h tu en a aussi dans alloca à voir selon le compilateur utilisé ...) Bon courage !! Recontacte si tu buches ! Amicalement Ollie314 Regarde ce petit tutos exellent : http://en.wikipedia.org/wiki/Malloc |
Vérifie aussi la priorité de tes opérateurs:
while ((c = fgetc(fp)) != '\n' && c != EOF) Je ne sais trop ce que ça donne, ya moyen de s'emmêler les pinceaux avec tous ces opérateurs... =>cop en bas de la page |
En fait en vérifiant pour les opérateurs, je crois que c'est bon.
C'était donc un message inutile :-~ |
| 09/01 16h16 | [Windows] Erreur de chargement RunDLL (rundll32.exe) | Windows |
| 10/02 11h16 | Codes d'erreur de Windows | Windows |
| 09/01 14h10 | [Windows] Accès impossible au panneau de configuration | Windows |
| 09/12 19h30 | [Internet] Récapitulatif MSN | MSN Messenger |
| 30/11 19h11 | Erreur segmentation C++ | 4 |
| 27/11 18h51 | [C++]erreur de segmentation | 8 |
| 25/04 22h18 | Programmation en c, erreur de segmentation | 15 |
| 31/12 18h05 | Stop! classique : Erreur de segmentation:( | 2 |
| 16/12 18h45 | C++ Erreur de segmentation (entres autres) | 3 |
![]() | DivFix - Il est fréquent que lors d'un téléchargement de vidéos ou lors d'un gravage sur CD ou autres supports la vidéo soit... | Catégorie: Codecs Licence: Freeware/gratuit |
![]() | Fractions - Dans l’apprentissage de la mathématique les fractions sont toujours de véritables ennuis pour certains. Cette application... | Catégorie: Bureautique Licence: Freeware/gratuit |
![]() | CCleaner - CCleaner (Crap Cleaner) est un utilitaire de nettoyage gratuit permettant de garantir un respect de la vie privée en... | Catégorie: Anonymat/Confidentialité Licence: Freeware/gratuit |
![]() | Vista Codec Package - Vista Codec Package regroupe une collection impressionnante de codecs (audio et vidéo), permettant d'ouvrir la plupart... | Catégorie: Codecs Licence: Freeware/gratuit |
![]() | Sony CMT-CPZ2 | Catégorie: Chaîne Hi-Fi | 181.00 € Ubaldi |
![]() | Sony CMTU1 | Catégorie: Chaîne Hi-Fi | 217.68 € Dimipro |
![]() | Genius KB-C100 PS/2 | Catégorie: Clavier | 11.90 € MicroChoix |
![]() | TNB CS110 | Catégorie: Casque audio | 5.90 € Alapage |