Wie man den Speicher frei, mit der malloc () Funktion in C-Programmierung

Hier ist ein Geheimnis: eine Variable in der C-Programmierung Deklarieren in Wirklichkeit ist das Programm leitet seit einiger Speicherplatz vom Betriebssystem zu betteln. Wie Sie wissen (hoffentlich, Sie wissen), ist das Betriebssystem der Herr Hochmeister des Computers oder was auch immer elektronischen Gerät Sie programmieren. Als solche doles es RAM-Programme aus, die sie anfordern.

Menu

Wenn Sie eine Variable, von einem niedrigen short int zu einem massiven String-Puffer deklarieren, sind Richten Sie das Programm für so viel Raum zu bitten, in dem Sie etwas Nützliches zu setzen. In der C-Sprache, können Sie auch Speicher im laufenden Betrieb zuordnen, solange Sie eine Armee von Zeigern zur Hand haben, die Adressen zu speichern.

Grundlagen der malloc () Funktion

Die malloc () Funktion gibt Ihr Programm Speicher Verlangen zu stillen. Geben Sie ihm einen Zeiger und malloc () reserviert Speicher (es bekommen?) In einer bestimmten Größe einen bestimmten Variablentyp zu speichern. Hier ist das Format:

p = (Art *) Malloc (Größe) -

Art eine Typumwandlung ist, Regie malloc () einen Teil des Speichers die richtige Menge an Informationen für den gegebenen Variablentyp zu speichern Größe zuzuordnen.

Größe ist die Menge an Speicher, die benötigt wird. Es wird in Bytes gemessen, aber man muss vorsichtig sein, genügend Speicher zuweisen den Variablentyp anzupassen. wenn Sie Platz brauchen zum Beispiel einen int-Wert zu speichern, müssen Sie genügend Speicherplatz zu schaffen, in die ein int-Wert passt. Diese Anzahl von Bytes wird traditionell mit dem Operator sizeof berechnet.

Die malloc () Funktion gibt die Adresse des Teil des Speichers, der zugeordnet wird. Die Adresse wird in Zeiger p gespeichert, die den Variablentyp müssen übereinstimmen. Wenn der Speicher nicht zugeordnet werden können, wird ein NULL-Wert zurückgegeben.

Sie müssen für die NULL überprüfen, bevor Sie den reservierten Speicher verwenden! Wenn Sie dies nicht tun, wird Ihr Programm mit bestimmten Gefahr begegnen.

Schließlich müssen Sie die Header-Datei stdlib.h im Quellcode enthalten den Compiler zufrieden mit der malloc () Funktion zu halten. Geben Sie mir Raum zeigt ein Beispiel.

GEBEN SIE MIR SPACE

# include # include int main () {int * Alter-age = (int *) malloc (sizeof (int) * 1) -wenn (Alter == null) {puts ( "Kann Speicher nicht zuweisen") - Ausgang (1 ) -} printf ( "Wie alt bist du?") -scanf ( "% d", Alter) -printf ( "Sie sind% d Jahre alt. n", * Alter) -return (0) -}

Das erste, was zu bemerken, über Give Me Raum ist, dass die einzige Variable ein Zeiger, Alter deklariert ist. Ein int-Variable ist nicht definiert, obwohl das Programm int Eingang akzeptiert und zeigt int ausgegeben.

Linie 8 verwendet malloc () beiseite zu legen Speicher für eine ganze Zahl ist. Um sicherzustellen, dass die richtige Menge an Speicher zugewiesen wird, wird die sizeof Operator verwendet. Zuzuteilen Platz für eine ganze Zahl ist, der Wert 1 wird durch das Ergebnis der sizeof (int) Betrieb multipliziert. (Dieser Vorgang ist an dieser Stelle nicht notwendig, aber es kommt ins Spiel später.) Die Adresse dieses Speichers wird im Zeitalter Zeiger gespeichert.

Zeile 9 Tests sicherzustellen, dass malloc () konnte Speicher zuzuweisen. Wenn nicht, zurückgegebene Wert NULL (das ist eine Konstante in stdlib.h definiert ist), und das Programm zeigt eine Fehlermeldung (siehe Zeile 11) und beendet (siehe Zeile 12).

Sie werden feststellen, dass die scanf () Funktion in Zeile 15 verwendet nicht die Präfix. Das ist, weil die Alter Variable ist eine Speicheradresse - es ist ein Zeiger! Sie brauchen nicht die in diesem Fall (wie Sie das nicht brauchen für eine Zeichenfolge, die von der scanf () Funktion lesen).

Schließlich wird peeker Notation in Zeile 16 verwendet, um den Wert Eingabe angezeigt werden soll.

Übung 1: Starten Sie ein neues Projekt, den Quellcode unter Verwendung von Give Me Raum. Erstellen und ausführen.

Übung 2: Give Me Mit Raum als Ihre Inspiration, schreiben Sie ein Programm, das für die aktuelle Temperatur außerhalb als Fließkommawert fragt. Haben Sie den Code an, ob die Eingabe Celsius oder Fahrenheit. Verwenden Sie malloc () Speicher für den Werteingang zu schaffen. Zeigen Sie die resultierende Temperatur in Kelvin. Hier sind die Formeln:

kelvin = Grad Celsius + 273,15-kelvin = (fahrenheit 459,67 +) * (5,0 / 9,0) -

Exercise 3: Schreiben Sie ein Programm, das Platz für drei int-Werte zuordnet - ein Array. Sie benötigen nur eine malloc () Funktion verwenden, um diese Aufgabe zu erfüllen. Weisen Sie 100, 200 und 300 an jedem int, und dann alle drei Werte anzuzeigen.

Wie String-Speicher zu erstellen

Die malloc () Funktion wird häufig verwendet, einen Eingangspuffer zu erzeugen. Diese Technik vermeidet erklärt und ein leeres Array Sizing. Beispielsweise die Schreibweise

char-Eingang [64] -

kann durch diese Erklärung ersetzt:

char * Input-

Die Größe des Puffers in den Code festgelegt wird, indem die malloc () Funktion .In einem Eingangspuffer Zuweisung erklärt der malloc () Funktion in Zeile 8 ein char-Array - ein Speicherpuffer - für etwa 1.024 Bytes. Okay, es ist ein Kilobyte (KB).

AUFTEILUNG einen Eingangspuffer

# include # include int main () {char * Input-Eingang = (char *) malloc (sizeof (char) * 1024) -wenn (Eingang == null) {puts ( "Kann Puffer zu reservieren! Oh nein!") -exit (1) -} puts ( "Geben Sie etwas lang und langweilig:") - fgets (Eingang, 1023, stdin) -puts ( "Sie schrieb:") - printf ( ""% s " n", input) -return (0) -}

Der Rest des Codes akzeptiert Eingaben und zeigt dann die Ausgabe. Die fgets () Funktion in Zeile 15 Grenzwerte Eingabe zu 1.023 Bytes, Raum verlassen links am Ende der Zeichenfolge für die 0 über.

Übung 4: Peitsche ein neues Projekt mit dem Quellcode oben aus Zuteilen einer Eingangspuffer.

Übung 5: Ändern Sie den Quellcode von Zuteilen einer Eingangspuffer. Erstellen Sie eine zweite char-Puffer durch einen Zeiger und malloc (). Nachdem der Text durch die fgets () Funktion gelesen wird, kopieren Sie diesen Text aus dem ersten Puffer in den zweiten Puffer (Eingang einen Eingangspuffer in Allokierung) - den gesamten Text mit Ausnahme des Newline-Zeichen, n, am Ende der Eingabe.

Übung 6: Ändern Sie den Quellcode aus Übung 5, so dass der zweite Puffer eine Version des Textes in dem ersten Puffer enthält, in der alle Vokale ersetzt wurden mit at-Zeichen (@).

Menü