meine Funktion:in C: Warum existiert eine Stack zugewiesene Struktur außerhalb der Funktion?
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;
}
}
in Haupt:
struct hostent * host = gethost(argv[2]);
(keine kleinere Fehler im Code ignorieren, ich bin aus dem Gedächtnis spucken)
das funktioniert gut. und Valgrind sagt mir nicht, dass ich die Erinnerung verliere, obwohl ich nicht frei bin.
Warum? Ich dachte, dass Sachen, die auf dem Stapel zugewiesen sind, verschwinden, wenn der Funktionsaufruf zurückkehrt? oder ist es, weil ich den Zeiger zurückgebe? Ist das in irgendeiner Weise gefährlich?
Ah vielen Dank. Es ist also einzigartig für 'gethostbyname'? Wenn ich das zum Beispiel für ein 'char *' mache, werden die Werte in diesem Array möglicherweise später überschrieben? Mein Programm muss nur mit einem Host pro Lauf umgehen, also sollte das in Ordnung sein. –
Ob der Wert, auf den ein Zeiger zeigt, bei späteren Aufrufen überschrieben wird, hängt von der Funktion ab, die Sie aufrufen. Für jede C-Standardbibliotheksfunktion, die einen Zeiger zurückgibt, den Sie nicht übergeben, können Sie davon ausgehen, dass sie einen Zeiger auf den statischen Speicher zurückgibt und überschrieben werden kann. – Gabe