|
|
|
|
Posté par
Tisiph0n3, le dimanche 17 février 2008 à 18:28:07Configuration: Linux Firefox 2.0.0.12
Salut,
Pourrais-tu mettre ton code ici, et un exemple de ce que tu as mis qui a fait bugguer le programme. Cordialement Google is your friend
|
Dans my_strdump, pourquoi tu calcules my_strlen(strl1) pour refaire un malloc dessus ? Si tu utilises strlen sur une chaine, c'est qu'elle est déjà allouée, sinon il ne faut pas l'utiliser. Peut-être que tu voulais écrire i=my_strlen(strl2); Non ?
Google is your friend
|
Bonjour,
Moi je le prends le pari que my_strndup s'appelle en fait my_strncat... La fonction strndup ne prend que deux paramètres elle, par contre strncat ne ferait pas d'allocation... Quel est le but exacte de ta fonction ? Là on dirait un mix des deux. Fiddy++; Il est louche le malloc... M. PS: Faudra appeler le plombier, y a des fuites ^^"
|
|
Ah, je comprends mieux ce que tu veux. :)
char *my_strndup(char *str1, char *str2, int n)
{
int i;
int i2;
i =strlen(str1);
char *result = (char*)malloc((i+n+1)*sizeof(char));
i=0;
while(i<strlen(str1))
result[i]=str1[i++];
i=0;
while(i<n)
result[strlen(str1)+i]=str2[i++];
result[strlen(str1)+n]='\0';
return (result);
}
J'espère que c'est ce que tu attendais. Google is your friend
|
Fiddy rocks ;-)
3 petits warnings tout de même (oui, je sais je suis maniaque ^^) warning : '=' : conversion from 'size_t' to 'int', possible loss of data pour le i = strlen warning : '<' : signed/unsigned mismatch pour le while(i<strlen(str1)) warning : 'i2' : unreferenced local variable Ah... M. Mais ça fuit toujours. Ah oui, je suis buté aussi, confirmes-tu Fiddy ? (Juste pour la fuite hein ;-))
|
On peut avoir le code de my_strlen s'il te plait ?
C'est quand même elle qui se fait écraser son pointeur... M. Yep, 2 posts d'un coup ^
|
ceci dit ça vient peut etre d'une autre fonction je pensais, parce qu'en fait j'avais remarqué qu'après plusieurs appels a get_next_line je retrouvait les commandes que j'avais passées precdemment, donc au bout de 10 commandes je me retrouvait avec une chaine qui contenait toutes les commandes, vraiment bizarre, le truc que j'ai donc fais c'est que juste après avoir recuperé la ligne sur l'entrée standard et en avoir fait ce que j'avais a faire, je passe l'adresse où était stockée la ligne a une fonction chargée de malloquer l'espace a cet endroit et de le remplir de 0 c'est peut etre ça |
Petite question : Pourquoi avoir mis str en static char ?
Google is your friend
|
Au fait... (Lalalaaa...)
free(str); return (str); C'est pas un peu dangereux ? Je suis d'accord aussi pour le static, il est à justifier. M, plombier ^^ |
bon pour eviter que le pointeur soit écrasé lorque je cherche a connaitre la longueur de str1 j'ai rajouté le mot clé const devant le premier paramètre de strlen ça a déplacé le probleme maintenant c'est un autre pointeur dans une autre fonction qui est écrasé il me cherche on dirait
|
up! :) |
A ce niveau là, il faut un bon debuggeur ou beaucoup de chance...
Je n'ai pas de théorie sur le fait que le const sur le paramètre change quoi que ce soit à lui seul... On a plusieurs solutions en admettant que ce soit bien un écrasement et non une allocation échouée ou oubliée. Commence par vérifier tous les tableaux (et donc chaînes de caractères), d'abord ceux en pile, puis les dynamiques, et après les statiques, c'est plus rare mais pourquoi pas... Cela peut également aider de sécuriser via des assertions pour se rendre compte le plus vite possible d'une erreur. L'état du précédent patient est stabilisé ? (Plus de fuites et plus de free hâtif ?) Bonne chasse, M.
|
pff c'est tek1 et leur minishell non vraiment voit avec autre etudiant au lieu de man google lol ^^ |