mi función:en C: ¿Por qué existe una estructura asignada de pila fuera de la función?
struct hostent * gethost(char * hostname){
if(/*some condition under which I want
to change the mode of my program to not take a host*/){
return null
}
else{
struct hostent * host = gethostbyname(hostname);
return host;
}
}
en el principal:
struct hostent * host = gethost(argv[2]);
(ignore los errores menores en el código, estoy vomitando de la memoria)
Esto funciona bien. y Valgrind no me dice que estoy perdiendo la memoria, a pesar de que no estoy liberando.
¿Por qué? Pensé que las cosas asignadas en la pila desaparecen con la llamada a la función de regresar? o es porque devuelvo el puntero? ¿Es esto peligroso de alguna manera?
Ah, muchas gracias. Entonces, ¿es exclusivo de 'gethostbyname'? si hiciera esto para un 'char *', por ejemplo, ¿los valores en esa matriz podrían sobrescribirse más tarde? Mi programa solo tiene que tratar con un host por ejecución, por lo que debería estar bien. –
Si el valor señalado por un puntero se sobrescribe en llamadas posteriores depende de la función a la que llama. Para cualquier función de biblioteca estándar de C que devuelva un puntero que no pase, puede asumir que está devolviendo un puntero a la memoria estática y puede sobreescribirse. – Gabe