2016-03-29 10 views
-2

Ich Speicher für Zeiger mit Malloc-Funktion zugeordnet. Ich hatte den Speicher mit free freigegeben. Aber wenn ich versuche, den Inhalt des Zeigers zu drucken, druckt er den Inhalt.Die Verwendung der freien Funktion in c

Dann was ist die Verwendung von free()?

+4

'free()' markiert nur den Speicher als verfügbar (wie in, es kann für weitere Zuordnungen verwendet werden). Es entfernt nicht den Inhalt des Speichers. Sie sollten jedoch nicht auf den Inhalt eines "freien" Speichers zugreifen, da dies Undefined Behavior ist. – Haris

+0

denken! Was würden Sie von dem Zeiger erwarten? Versuchen Sie noch ein paar Mallocs zu machen und drucken Sie dann den "Inhalt" und sehen Sie, was da ist. Es empfiehlt sich, den Zeiger nach dem Freigeben auf null zu setzen. – CarlH

Antwort

1

free() markiert nur den Speicher als verfügbar (wie in, es kann für weitere Zuordnungen verwendet werden). Es entfernt nicht den Inhalt des Speichers.

Das heißt, Sie sollten nicht auf den Inhalt eines free d Speicher zugreifen, wie es Undefined Behavior ist.

+1

Nur um hinzuzufügen, weil Sie etwas befreit haben, sollten Sie auch diesen Zeiger auf Null setzen, um zu verhindern, dass hängende Zeiger hängen herum – Tmayto

+0

Wenn das so eine gute Idee ist, frage ich mich, warum free() keinen Zeiger nimmt -to-pointer-Argument, so dass es selbst den Zeiger auf NULL setzen kann? –

Verwandte Themen