Segmentation Falt

Résolu/Fermé
alemare Messages postés 1 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 28 novembre 2013 - 28 nov. 2013 à 14:38
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 28 nov. 2013 à 16:48
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 939 Date d'inscription mardi 26 février 2008 Statut Membre Dernière intervention 26 décembre 2016 222
28 nov. 2013 à 14:53
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
28 nov. 2013 à 16:48
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