Segfault en C
Fermé
Tisiph0n3
-
16 nov. 2007 à 03:17
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 16 nov. 2007 à 23:44
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 16 nov. 2007 à 23:44
20 réponses
Bonjour,
Ce serait bien que vous nous expliquiez comment vous avez rempli la variable "base" dont vous cherchez la valeur. Sans cette information on ne peut pas vous répondre.
Manu
Ce serait bien que vous nous expliquiez comment vous avez rempli la variable "base" dont vous cherchez la valeur. Sans cette information on ne peut pas vous répondre.
Manu
void my_put_nbr_base(unsigned int nbr, char *base)
donc
my_put_nbr_base(100, "012345678")
Voilà c'est tout , de plus je ne cherche pas sa valeur mais sa longueur...
Merci
donc
my_put_nbr_base(100, "012345678")
Voilà c'est tout , de plus je ne cherche pas sa valeur mais sa longueur...
Merci
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 nov. 2007 à 18:06
16 nov. 2007 à 18:06
essaye avec un & quand tu appelle la fonction my_strlen(&base);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 nov. 2007 à 19:20
16 nov. 2007 à 19:20
tu as bien declaré base_len comme un int ?
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 nov. 2007 à 19:46
16 nov. 2007 à 19:46
poste ton programme en entier sa sera plus simple pour nous de t'aidé ;)
Bonjour,
désolé ça je ne peux pas ce que je peux te dire par contre c'est que la fonction my_put_str_base intervennait dans une autre fonction et qu'elle marchait très bien la seule chose que j'ai modifié c'est la condition du if() (fonction recursive) et quand elle faisait partie de l'autre fonction le 2e argument était du meme type rien n'a changé dans my_put_nbr_base, donc voila j'ignore totalement ce qui ne va pas de toute façon c'est base_len = my_strlen(base) qui segfault mais cette ligne est restée inchangée donc bon là c'est mystère de chez mystère
désolé ça je ne peux pas ce que je peux te dire par contre c'est que la fonction my_put_str_base intervennait dans une autre fonction et qu'elle marchait très bien la seule chose que j'ai modifié c'est la condition du if() (fonction recursive) et quand elle faisait partie de l'autre fonction le 2e argument était du meme type rien n'a changé dans my_put_nbr_base, donc voila j'ignore totalement ce qui ne va pas de toute façon c'est base_len = my_strlen(base) qui segfault mais cette ligne est restée inchangée donc bon là c'est mystère de chez mystère
complément d'info j'ai essayé avec
base_len = my_strlen("012345678"); eh ben ça segfault toujours c'est a n'y rien comprendre....
base_len = my_strlen("012345678"); eh ben ça segfault toujours c'est a n'y rien comprendre....
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 nov. 2007 à 22:38
16 nov. 2007 à 22:38
tu as fait une allocation de memoire pour base ?
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 nov. 2007 à 22:57
16 nov. 2007 à 22:57
oui essaye avec le malloc sinon le seul autre pobleme que je vois
c'est que a l'apel de la fonction my_strlen tu lui passe un pointeur au lieu de son adresse mais tu m'a dit que tu as toujours l'erreur avec le "&"...
c'est que a l'apel de la fonction my_strlen tu lui passe un pointeur au lieu de son adresse mais tu m'a dit que tu as toujours l'erreur avec le "&"...
bon ben ça a l'air de marcher en faisant
base = malloc(my_strlen(base) * sizeof(char));
base_len = my_strlen(base);
maintenant j'ai un floating exception car je divise nb par base_len et apparement base est vide malloc écrase t il les données de base ? Parce que base est affectée lors de l'appel de my_put_nbr_base .
De plus je comprends pas pk je dois faire un malloc n'est ce pas automatique quand les données sont passées a une fonction?
En plus my_strlen ne fait que parcourir la chaine voila son code:
int my_strlen(char *str)
{
int i;
i = 0;
while (str[i] != '\0')
{
i++;
}
return (i);
}
Donc logiquement ya pas besoin de malloc....
Je m'y perd
base = malloc(my_strlen(base) * sizeof(char));
base_len = my_strlen(base);
maintenant j'ai un floating exception car je divise nb par base_len et apparement base est vide malloc écrase t il les données de base ? Parce que base est affectée lors de l'appel de my_put_nbr_base .
De plus je comprends pas pk je dois faire un malloc n'est ce pas automatique quand les données sont passées a une fonction?
En plus my_strlen ne fait que parcourir la chaine voila son code:
int my_strlen(char *str)
{
int i;
i = 0;
while (str[i] != '\0')
{
i++;
}
return (i);
}
Donc logiquement ya pas besoin de malloc....
Je m'y perd
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 nov. 2007 à 23:13
16 nov. 2007 à 23:13
juste avant d'affecter a base ces valeur tu fais
base = malloc(100) pour avoir au moins 100 case memoire disponible apres tu affecte a base ces valeurs
base ="328346454\0"
et la tu derais pouvoir utliser ta fonction my_strlen pour compter les caracteres
base = malloc(100) pour avoir au moins 100 case memoire disponible apres tu affecte a base ces valeurs
base ="328346454\0"
et la tu derais pouvoir utliser ta fonction my_strlen pour compter les caracteres
ah oui jme demandais pourquoi base = malloc (my_strlen(base)); ne segfault il pas? pourtant j'essaie de recuperer une longueur de chaine donc ça revient au mm :/
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 nov. 2007 à 23:05
16 nov. 2007 à 23:05
sizeof(char) = 1 donc malloc (my_strlen*sizeof(char))= malloc(my_strlen)
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 nov. 2007 à 23:17
16 nov. 2007 à 23:17
je pense que ta fonction my_strlen ne parcourait aucune chaine parce que la chaine base n'existait pas comme tu n'avais pas fait d'allocation memoire...
ok bon là c'est la mort j'ai une autre fonction my_putstr inutile d'expliquer a quoi elle sert je pense
et j'ai tout remis comme avant sans faire de malloc sur base alors ça donne
my_putstr(base);
base_len = my_strlen(base);
eh ben quand j'affiche base avant de regarder sa longueur ça segfault pas mais si je n'affiche pas base avant ça segfault, my_putstr ne fait aucun malloc elle est basée sur my_strlen :/ ça devient de plus en plus chelou cette histoire!
et j'ai tout remis comme avant sans faire de malloc sur base alors ça donne
my_putstr(base);
base_len = my_strlen(base);
eh ben quand j'affiche base avant de regarder sa longueur ça segfault pas mais si je n'affiche pas base avant ça segfault, my_putstr ne fait aucun malloc elle est basée sur my_strlen :/ ça devient de plus en plus chelou cette histoire!
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 nov. 2007 à 23:27
16 nov. 2007 à 23:27
avec tes petits bout de code c'est difficile de comprendre le probleme... ;)
Ah bah oui mais désolé mais de 1 le reglement de mon école m'interdit de foutre le moindre petit bout de code fait avec leur matos sur internet car ce code ne m'appartient pas meme si c'est moi qui l'ai écrit, de 2 le projet n'étant pas encore rendu je n'ai pas envie qu'un blaireau prenne mon code et qu'après ce soit moi qui soit suspecté de tricherie lors de la soutenance. Donc voila moi aussi j'aurais carrément preferé poser le code comme ça ça m'aurais evité de devoir tout expliquer ;),
Bref au final j'ai passé la fonction en itératif et plus de segfault, pas de malloc ni rien merci d'avoir essayé de m'aider...
Bref au final j'ai passé la fonction en itératif et plus de segfault, pas de malloc ni rien merci d'avoir essayé de m'aider...
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 nov. 2007 à 23:44
16 nov. 2007 à 23:44
de rien ;)