Wie man den Speicher frei, in C-Programmierung

Es ist nicht so sehr ein Problem, da es zurück in den Mikrocomputer-Ära war, aber verschwenden Speicher sollte immer noch ein Problem für jeden C-Programmierer sein. Auch wenn Sie sich für 1.024 Zeichen von Eingabe stemmen kann, stehen die Chancen gut, dass Benutzer Ihr Programm nicht alle Stephen King sein kann.

In diesem Fall können Sie Ihre Speicheranforderungen abspecken, nachdem Sie sie machen. Der zusätzliche Speicher kann dann an das Betriebssystem in zurückgegeben werden, was Höflichkeit betrachtet wird.

Die zurück ein paar Bytes

# include # include # include int main () {char * input-int len-Eingang = (char *) malloc (sizeof (char) * 1024) -wenn (Eingang == null) {puts ( "Kann Puffer zu reservieren! Oh nein ") - Ausgang (1) -} puts (" Geben Sie etwas lang und langweilig: ") - fgets (Eingang, 1023, stdin) -LEN = strlen (Eingang) -wenn (realloc (Eingang, sizeof (char) * (lEN + 1)) == NULL) {puts ( "Kann nicht Puffer neu zu verteilen!") - Abfahrt (1) -} puts ( "Memory umverteilt.") - puts ( "Du hast geschrieben:") - printf ( " "% s " n ", input) -return (0) -}

Der Source-Code in Giving Back ein paar Bytes beherbergt das realloc () Funktion in Zeile 19. Hier ist das Format:

p = Realloc (Puffer,Größe) -

Puffer Bereich ist eine bestehende Speicher, durch die malloc () erstellt wurde (oder ähnlich) Funktion. Größe Größe ist der neue Puffer auf der Basis jedoch viele Einheiten eines bestimmten Variablentyp benötigen. Bei Erfolg realloc () gibt einen Zeiger auf Puffer- andernfalls wird NULL zurückgegeben. Wie bei malloc () erfordert die realloc () gibt die stdlib.h-Header.

Der string.h-Header wird in an der Linie 3 genannt, dass die Verwendung der Funktion strlen () in Zeile 18 der Eingabestring der Länge gesammelt zu erfüllen ist und in die gespeicherte len Variable.

In Zeile 19 wird die realloc () Funktion aufgerufen. Es ändert die Größe eines bereits erstellten Puffer auf einen neuen Wert. In Zeile 19, ist, dass Puffer der Eingangspuffer, und die Größe ist die Länge der Schnur plus 1 für die 0 Zeichen zu berücksichtigen. Schließlich ist es der Text, der Eingang war und alle Speicher, der benötigt wird.

Wenn die realloc () Funktion erfolgreich ist, ändert die Größe es den Puffer. Wenn nicht, wird NULL zurückgegeben, die bei Line getestet wird 19 und, wenn sie wahr ist, entsprechende Fehlermeldungen angezeigt werden.

Übung 1: Geben Sie den Quellcode von Giving Back wenigen Bytes in Ihren Editor. Erstellen und ausführen.

Obwohl Sie keine sekundäre Bestätigung haben, kann davon ausgegangen werden, dass die erfolgreichen Aufruf der realloc () Funktion in der Tat war, die Eingangspuffergröße genau schrumpfen, was nötig war. Übrig gebliebene Speicher ist wieder verfügbar, um das Programm.

Eine letzte Funktion ist erforderlich, um malloc zu machen () und realloc () in einem Trio. Das ist die freie () Funktion, demonstriert in Wenn Sie Ihre Speicher Liebe, Set es frei.

Wenn Sie Ihren Speicher Love, SET IT FREE

# include # include int main () {int * Alter-age = (int *) malloc (sizeof (int) * 1) -wenn (Alter == null) {puts ( "Out of Memory oder etwas!") - Ausfahrt (1) -} printf ( "Wie alt sind Sie in Jahren?") -scanf ( "% d", Alter) - * Alter * = 365-printf ( "Du bist mehr als% d Tage alt n", * Alter) -freie (Alter) -return (0) -}

Die freie () Funktion gibt den zugewiesenen Speicher, ist es für malloc () oder etwas anderes zu bedienen.

Übung 2: Geben Sie den Quellcode aus, wenn Sie Ihr Gedächtnis Liebe, Set es frei in ein neues Projekt. Erstellen und ausführen.

Es ist nicht notwendig, free () in Ihrem Code zu verwenden, es sei denn, es ist erforderlich oder empfohlen. Die meisten Programmierer verwenden nicht frei (), dank der Unmengen von Speicher verpackt in den meisten elektronischen Geräte von heute. Speicher verwendet durch das Programm wird automatisch durch das Betriebssystem freigegeben, wenn das Programm beendet wird. Wenn der Speicher knapp ist, verwenden jedoch großzügig sowohl realloc () und free () Fehler out-of-memory zu vermeiden.

Menü