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 allozieren möchten. Sie gibt einen Void-Pointer auf den allozierten Speicherblock zurück, oder NULL, falls die Allozierung fehlschlägt. Da sie einen Void-Pointer zurückgibt, können Sie diesen direkt einem typisierten Pointer zuweisen; das Casting ist in C optional (im Gegensatz zu C++, wo es erforderlich ist).

#include <stdlib.h>

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

Der entscheidende Vorteil von malloc() ist die Flexibilität – Sie können genau die Menge an Speicher anfordern, die Sie zur Laufzeit 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; das Casten des zurückgegebenen Void-Pointers ist in C optional, da er automatisch in den Typ konvertiert wird, dem Sie ihn zuweisen.

challenge icon

Aufgabe

Einfach

Schreiben Sie ein C-Programm, das die dynamische Speicherallokation mit malloc() demonstriert, um einen einzelnen Integer auf dem Heap zu erstellen und damit zu arbeiten. Ihr Programm sollte:

  1. malloc() verwenden, um dynamisch Speicher für einen Integer zu reservieren
  2. Den zurückgegebenen Void-Pointer in einen Integer-Pointer casten
  3. Einen Integer-Wert aus der Benutzereingabe lesen
  4. Den eingegebenen Wert mithilfe 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 Speicherallokation demonstrieren: Speicher vom Heap anfordern, diesen zum Speichern und Bearbeiten von Daten verwenden und mit dem reservierten Speicher über Pointer-Operationen arbeiten.

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 Speicherallokation 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.

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