Bonjour,
Alors voila j'ai un petit probleme en C bien bizarre. J'utilise la fonction gethostbyname, qui fonctionne parfaitement si elle est appellé en gros au tout debut de mon prog, mais si elle appellé apres un certain nombre de fonction, elle merde sur getenv...
----------------------------------------------------------------------------
Program received signal SIGSEGV, Segmentation fault.
*__GI_getenv (name=0x40139e28 "CALDOMAIN") at ../sysdeps/generic/getenv.c:84
84 ../sysdeps/generic/getenv.c: Aucun fichier ou répertoire de ce type.
in ../sysdeps/generic/getenv.c
(gdb) where
#0 *__GI_getenv (name=0x40139e28 "CALDOMAIN")
at ../sysdeps/generic/getenv.c:84
#1 0x400fccdd in __res_vinit (statp=0x40149360, preinit=0) at res_init.c:197
#2 0x400fcbe5 in *__GI___res_ninit (statp=0x6b636162) at res_init.c:138
#3 0x40100ae8 in *__GI___nss_hostname_digits_dots (
name=0x804c580 "www.hardware.fr", resbuf=0x401495e4, buffer=0x40147980,
buffer_size=0x401495e0, buflen=0, result=0xbffffbc4, status=0x0,
typep=0x0, flags=0, afp=0x0, h_errnop=0xbffffbc8) at ctype.h:35
#4 0x401022ad in gethostbyname (name=0x804c580 "www.hardware.fr")
at getXXbyYY.c:114
#5 0x08049cd2 in sockop (host=0x804c580 "www.hardware.fr", port=80,
uri=0x804c988 "d\202\024@d\202\024@") at socket.c:24
#6 0x08049631 in main () at main.c:29
----------------------------------------------------------------------------
J'ai eu beau chercher partout sur google, j'ai trouvé aucune explication ni rien...
Qqn a une idee pour me sauver? (Soit pour utiliser gethostbyname, soit une autre fonction)
# Re: Gethostbyname, getenv et segmentation fault..
Posté par Marc (site web personnel) . Évalué à 4.
bon ok c'est nul
# Re: Gethostbyname, getenv et segmentation fault..
Posté par Troy McClure (site web personnel) . Évalué à 2.
# Re: Gethostbyname, getenv et segmentation fault..
Posté par Denis Montjoie (site web personnel) . Évalué à 3.
cest a peu pres ca (oui je sais mon cast est peut etre foireux mais jai pas retouvé la bonne version nikel)
NOUBLIE PAS que la struct hostent est géré par L'OS comme un highlander et donc cest pas toi qui la possede->en gros si tu fait un 2eme gethostbyname TOUS tes pointeurs hostent pointront vers la nouvelle struct (Il ne peux en rester qu'une :) )
sinon balance ton code quon puisse dire si ya un probleme genre ton char * host est foireux.
// resout un nom DNS en adresse IP
void resolve_name(char *host,char *IP){
struct hostent *h;
struct sockaddr_in local;
h=gethostbyname(host);
if (h==NULL)
{
strcpy(IP,host);
return;
}
local.sin_addr.s_addr = *(u_long *)h->h_addr_list[0];
strcpy(IP,inet_ntoa(local.sin_addr));
}
# Re: Gethostbyname, getenv et segmentation fault..
Posté par Sylvestre Ledru (site web personnel) . Évalué à 1.
(et il y a des endroits plus mieux pour ce genre de question)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.