Rückgabe von Daten trotz free()
-
Hallo,
ich hab mal ne Frage. Warum kann ich trotzdem einen Wert an die Funktion zurückgeben, obwohl es schon freigegeben wurde?
char* loeschen_start(void) { char *name; mitglied *X = START; START=X->next; name=X->name; free(X); return name; }
Heißt das theoretisch, wenn ich den Speicherplatz freigebe und ein anderes Programm überschreibt den Bereich, dann würde die Funktion Müll zurückgeben oder?
Gruß
-
Das wäre theoretisch möglich, wenn der betroffene physische Speicher zwischenzeitlich einem anderen Prozess zugeordnet, dort wieder freigegeben und erneut an der selben Stelle deinem Programm zugeordnet wurde, aber es ist in der Praxis wohl doch eher unwahrscheinlich. Jedenfalls, wenn du kein uraltes Betriebssystem ohne virtuelle Speicherverwaltung benutzt.
Vom C-Standard her gesehen ist das schlicht undefiniertes Verhalten; er äußert sich nicht darüber, was in einem solchen Fall geschehen wird. Praktisch wird es zwar häufig vorkommen, dass an der Stelle im Speicher immer noch steht, was du vorher dort hingeschrieben hast, aber du kannst dich weder darauf verlassen, noch darauf, dass dir der Zugriff auf die Adresse immer noch gestattet ist.