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 -
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 =)
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
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.
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.
sizeof() s'en fiche que la chaîne soit initialisée ou pas, ce qui importe c'est la taille. Ici, sizeof renverra 1