mia funzione:in C: Perché una struttura allocata nello stack esiste al di fuori della funzione?
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;
}
}
nel principale:
struct hostent * host = gethost(argv[2]);
(ignorare eventuali piccoli errori nel codice, sto vomitando da memoria)
questo funziona bene. e Valgrind non mi dice che sto perdendo memoria, nonostante il fatto che non mi stia liberando.
Perché? Ho pensato che le cose allocate nello stack sparissero con la chiamata alla funzione che ritornava? o è perché restituisco il puntatore? è pericoloso in qualche modo?
Ah grazie mille. Quindi è unico per 'gethostbyname'? se l'ho fatto per un 'char *', ad esempio, i valori in quell'array potrebbero essere sovrascritti in seguito? Il mio programma deve gestire solo un host per corsa, quindi dovrebbe andare bene. –
Se il valore indicato da un puntatore viene sovrascritto nelle chiamate successive dipende dalla funzione che si sta chiamando. Per qualsiasi funzione di libreria standard C che restituisce un puntatore che non si passa, si può presumere che restituisca un puntatore alla memoria statica e che possa essere sovrascritto. – Gabe