Segmentation Falt

Résolu
alemare Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut tout le monde,
Je fais un programme en ce moment sur une fonction qui permettrait de supprimer des caractères comme : espace, '\n' et '\t' sans supprimer ces caractères s'ils sont inclus entre les autres : exemple: \n\tsalut tout le \t monde\n \t\n ici il faut supprimer tous ces caractères avant le 's' de salut et toutes celles après le 'e' de monde sans supprimer ceux à l'intérieur. Je debute dans la programmation et ca fait 2 jour que je bloque sur cette fonction que j'ai recommencé plusieurs fois et là c'est la bonne normalement mais elle seg fault mais je ne trouve pas l'erreur.

Voici mon programme :

static int delet(char c)
16 {
17 if (c == ' ' || c == '\n' || c == '\t')
18 return (1);
19 return (0);
20 }
21
22 char function(char const *s)
23 {
24 char *dest;
25 int i;
26 int j;
27
28 i = 0;
29 j = 0;
30 dest = malloc((ft_strlen(s) + 1) * sizeof(*dest));
31 if (dest == NULL)
32 return (NULL);
33 while (s[i] != '\0' || (delet(s[i]) == 1))
34 i++;
35 while (s[i] != '\0')
36 {
37 dest[j] = s[i];
38 i++;
39 j++;
40 }
41 while (j > 0 || delet(dest[j - 1]) == 1)
42 j--;
43 dest[j] = '\0';
44 return (dest);
45 }

Merci de vos reponses =)

1 réponse

aramir Messages postés 959 Date d'inscription   Statut Membre Dernière intervention   222
 
Bon je regarde ca vite fait. Mais je dirais que t'as un problème avec ton malloc.
dest = malloc((ft_strlen(s) + 1) * sizeof(*dest));

ok, je comprends pas de soucis. malloc de la taille de s +1 (ft_strlen renvoit peut etre aussi le caractère de retour chariot, j'ai pas vérifié, mais il se peut que ton +1 soit inutile du coup). Mais le problème vient peut etre surtout de *dest. A ce moment là dest est pas initialisé c'est juste un pointeur qui pointe sur on ne sait quoi. tu fais sizeof() d'un truc tout a fait random, peut etre même de NULL. essaies de remplacer sizeof(*dest) par sizeof(char) tout simplement.

Après je lis ca très vite, encore une fois. Fais signe si ca marche.

0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Mais le problème vient peut etre surtout de *dest. A ce moment là dest est pas initialisé c'est juste un pointeur qui pointe sur on ne sait quoi. tu fais sizeof() d'un truc tout a fait random,
sizeof() s'en fiche que la chaîne soit initialisée ou pas, ce qui importe c'est la taille. Ici, sizeof renverra 1
0