malloc in Funktion
-
Hallo,
ich habe eine Frage:
Variablen, die innerhalb einer Funktion definiert werden, sind nur innerhalb der Funktion sichtbar. Wie ist das mit einem Speicherbereich, der mit malloc() innerhalb einer Funktion angefordert wurde? Verschwindet dieser Speicherbereich
nach Beenden der Funktion oder erst, nachdem er mit free() freigegen wurde?Mit anderen Worten: kann man auf den Speicherbereich von main() aus noch zugreifen?
Danke
-
Wow! Erst mal großes Lob. Saubere Frage - und du hast den Stack verstanden - und du hast definieren statt deklarieren geschrieben. Darf man fragen mit welchem Buch du lernst?
gigg schrieb:
Verschwindet dieser Speicherbereich nach Beenden der Funktion oder erst, nachdem er mit free() freigegen wurde?
Der Speicher bleibt gültig, bis er mit free() freigegeben wird. Er ist nicht abhängig vom Scope. Das heißt aber auch, dass der Speicher reserviert bleibt, wenn du das free() vergisst.
Weiter ist es aber relativ unüblich mit malloc() reservierten Speicher bzw. einen Zeiger darauf aus einer Funktion zurückzugeben, weil der Aufrufer dann daran denken muss das freizugeben - aber der muss das erst mal in der Doku für diese Funktion nachschlagen. Daher versucht man das zu vermeiden, Funktionen die in einen Puffer schreiben sollen, kriegen daher meistens Zeiger auf den Anfang und Größe eines Speicherbereichs mitgegeben. (Siehe z.B. fread())
-
Der wird erst per free-Aufruf wieder freigegeben. Du musst natürlich einen Weg finden, einen Zeiger auf den Bereich aus Deiner Funktion heraus an main zu liefern.
-
Danke für die Antwort.
Ich lerne mit dem besten Buch:
The C Programming Language
Habe das englischsprachige Original und konnte irgendwie keine Antwort finden.
Grüße