Menu
Coddy logo textTech

Dynamische Allokation - malloc()

Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 32 von 63.

Jetzt lernen Sie etwas über malloc(), die primäre Funktion zum Anfordern von Speicher vom Heap während der Programmausführung. Die Funktion malloc() steht für „memory allocation“ und ermöglicht es Ihnen, Speicher dynamisch zu reservieren, wenn Sie ihn benötigen, anstatt Variablen mit fester Größe zur Kompilierzeit zu deklarieren.

Die Funktion malloc() nimmt ein Argument entgegen: die Anzahl der Bytes, die Sie reservieren möchten. Sie gibt einen Void-Pointer auf den reservierten Speicherblock zurück, oder NULL, falls die Reservierung fehlschlägt. Da sie einen Void-Pointer zurückgibt, müssen Sie diesen in den entsprechenden Datentyp umwandeln.

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Speicher für einen Integer reservieren
// ptr zeigt nun auf einen Speicherort, der einen Integer aufnehmen kann

Der entscheidende Vorteil von malloc() ist die Flexibilität – Sie können zur Laufzeit genau die Menge an Speicher anfordern, die Sie benötigen, und dieser Speicher bleibt verfügbar, bis Sie ihn explizit freigeben. Dies ist besonders nützlich, wenn Sie erst während der Ausführung Ihres Programms wissen, wie viel Speicher Sie benötigen werden.

Denken Sie daran, <stdlib.h> einzubinden, um malloc() zu verwenden, und casten Sie den zurückgegebenen Void-Pointer immer so, dass er dem Datentyp entspricht, mit dem Sie arbeiten.

challenge icon

Aufgabe

Einfach

Schreiben Sie ein C-Programm, das die dynamische Speicherbelegung mit malloc() demonstriert, um eine einzelne Ganzzahl auf dem Heap zu erstellen und damit zu arbeiten. Ihr Programm sollte:

  1. malloc() verwenden, um dynamisch Speicher für eine Ganzzahl zu reservieren
  2. Den zurückgegebenen Void-Pointer in einen Integer-Pointer casten
  3. Einen Ganzzahlwert aus der Benutzereingabe lesen
  4. Den eingegebenen Wert unter Verwendung des Dereferenzierungsoperators im dynamisch reservierten Speicher speichern
  5. Den gespeicherten Wert im Format Stored value: [value] ausgeben
  6. Das Quadrat des Wertes berechnen und an derselben Speicherstelle speichern
  7. Den quadrierten Wert im Format Squared value: [value] ausgeben

Denken Sie daran, den Header <stdlib.h> einzubinden, um malloc() zu verwenden. Ihr Programm sollte den grundlegenden Arbeitsablauf der dynamischen Speicherbelegung demonstrieren: Anfordern von Speicher vom Heap, Verwenden des Speichers zum Speichern und Manipulieren von Daten und Arbeiten mit dem reservierten Speicher über Pointer-Operationen.

Wenn der Benutzer beispielsweise 7 eingibt, sollte Ihre Ausgabe wie folgt aussehen:

Stored value: 7
Squared value: 49

Diese Herausforderung führt Sie in das grundlegende Konzept der dynamischen Speicherbelegung ein, bei der Speicher zur Laufzeit angefordert wird, anstatt zur Kompilierzeit festgelegt zu sein, was Ihren Programmen eine größere Flexibilität bei der Speichernutzung verleiht.

Spickzettel

Die Funktion malloc() reserviert während der Programmausführung dynamisch Speicher auf dem Heap. Sie nimmt die Anzahl der zu reservierenden Bytes entgegen und gibt einen Void-Pointer auf den reservierten Speicherblock zurück, oder NULL, falls die Reservierung fehlschlägt.

Binden Sie <stdlib.h> ein, um malloc() zu verwenden:

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Speicher für eine Ganzzahl reservieren

Wichtige Punkte:

  • Casten Sie den zurückgegebenen Void-Pointer immer in den entsprechenden Datentyp
  • Der Speicher bleibt verfügbar, bis er explizit freigegeben wird
  • Bietet die Flexibilität, zur Laufzeit exakte Speichermengen anzufordern
  • Verwenden Sie sizeof(), um die korrekte Anzahl der benötigten Bytes zu ermitteln

Probier es selbst

#include <stdio.h>
#include <stdlib.h>

int main() {
    // Eingabe lesen
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: Schreibe deinen Code unten
    // 1. Verwende malloc(), um Speicher für einen Integer zu reservieren
    // 2. Caste den zurückgegebenen Pointer zu int*
    // 3. Speichere den Eingabewert im reservierten Speicher
    // 4. Gib den gespeicherten Wert aus
    // 5. Berechne das Quadrat und speichere es an derselben Stelle
    // 6. Gib den quadrierten Wert aus
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow