Segfault en C

Tisiph0n3 -  
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
alors voila j'ai une fonction qui peux afficher un nb ds n'importe quel base prototypage
void my_put_nbr_base(unsigned int nbr, char *base)
il me faut la longueur de la chaine base donc j'ai une autre fonction
int my_strlen(char *str)
qui au passage a toujours fonctionné sans probleme, je compile donc un main qui appelle my_put_nbr_base
my_put_nbr_base(100, "012345678")
PAF segfault bouhouhou
bon ben gdb alors:
et c'est la ligne
base_len = my_strlen(base); de ma fonction my_put_nbr_base
qui fout la merde.
La question: PoUrQuOi? -_-'
jveux dire la fonction my_strlen a toujours marché nickel, elle prend un char* en paramètre et comme je lui passe une chaine de caractère à travers my_put_nbr_base pas de pb.
Et je l'ai déjà utilisé de ttes les manieres possibles et imaginables, jamais un segfault avec ça.
Donc si quelqu'un a une idée qu'il parle par pitié!
Merci :)

20 réponses

Manu
 
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
0
Tisiph0n3
 
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
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
essaye avec un & quand tu appelle la fonction my_strlen(&base);
0
Tisiph0n3
 
Erf ça change rien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
tu as bien declaré base_len comme un int ?
0
Tisiph0n3
 
Oui base_len est déclaré en int
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
poste ton programme en entier sa sera plus simple pour nous de t'aidé ;)
0
Tisiph0n3
 
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
0
Tisiph0n3
 
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....
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
tu as fait une allocation de memoire pour base ?
0
Tisiph0n3
 
non pas de malloc ça marchait à la base sans malloc donc bon mais je vais essayer
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
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 "&"...
0
Tisiph0n3
 
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
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
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
0
Tisiph0n3
 
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 :/
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
sizeof(char) = 1 donc malloc (my_strlen*sizeof(char))= malloc(my_strlen)
0
Tisiph0n3
 
oui ça je sais lol
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
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...
0
Tisiph0n3
 
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!
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
avec tes petits bout de code c'est difficile de comprendre le probleme... ;)
0
Tisiph0n3
 
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...
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
de rien ;)
0