Menu
Coddy logo textTech

Dynamische Allokation - malloc()

Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 32 von 63.

Jetzt lernst du malloc() kennen, die wichtigste Funktion zum Anfordern von Speicher auf dem Heap während der Programmausführung. Die Funktion malloc() steht für „memory allocation“ und ermöglicht es dir, Speicher dynamisch zuzuweisen, wenn du ihn benötigst, anstatt zur Kompilierzeit Variablen fester Größe zu deklarieren.

Die Funktion malloc() nimmt ein Argument entgegen: die Anzahl der Bytes, die du zuweisen möchtest. Sie gibt einen void pointer auf den zugewiesenen Speicherblock oder NULL zurück, wenn die Zuweisung fehlschlägt. Da sie einen void pointer zurückgibt, kannst du ihn direkt einem typisierten Pointer zuweisen; das Casten ist in C optional (anders als in C++, wo es erforderlich ist).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Speicher für eine Ganzzahl zuweisen
// ptr zeigt jetzt auf eine Speicherstelle, die eine Ganzzahl aufnehmen kann

Der entscheidende Vorteil von malloc() ist die Flexibilität – du kannst zur Laufzeit genau die Menge an Speicher anfordern, die du benötigst, und dieser Speicher bleibt verfügbar, bis du ihn ausdrücklich freigibst. Das ist besonders nützlich, wenn du erst während der Ausführung deines Programms weißt, wie viel Speicher du benötigen wirst.

Denke daran, <stdlib.h> einzubinden, um malloc() zu verwenden. Das Umwandeln des zurückgegebenen Void-Zeigers ist in C optional, da er automatisch in den Typ konvertiert wird, dem du ihn zuweist.

challenge icon

Aufgabe

Einfach

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

  1. malloc() verwenden, um dynamisch Speicher für eine Ganzzahl zuzuweisen
  2. Den zurückgegebenen void-Zeiger in einen Ganzzahlzeiger umwandeln
  3. Einen Ganzzahlwert aus der Benutzereingabe lesen
  4. Den Eingabewert mithilfe des Dereferenzierungsoperators im dynamisch zugewiesenen Speicher speichern
  5. Den gespeicherten Wert im Format Stored value: [value] ausgeben
  6. Das Quadrat des Werts berechnen und an derselben Speicherstelle speichern
  7. Den quadrierten Wert im Format Squared value: [value] ausgeben

Denke daran, den Header <stdlib.h> einzubinden, um malloc() verwenden zu können. Dein Programm sollte den grundlegenden Ablauf der dynamischen Speicherzuweisung demonstrieren: Speicher vom Heap anfordern, ihn zum Speichern und Bearbeiten von Daten verwenden und mit dem zugewiesenen Speicher über Zeigeroperationen arbeiten.

Wenn der Benutzer beispielsweise 7 eingibt, sollte deine Ausgabe folgendermaßen aussehen:

Stored value: 7
Squared value: 49

Diese Herausforderung führt dich in das grundlegende Konzept der dynamischen Speicherzuweisung ein, bei dem Speicher zur Laufzeit angefordert wird, anstatt zur Kompilierzeit festgelegt zu sein. Dadurch erhalten deine Programme mehr Flexibilität bei der Speichernutzung.

Probier es selbst

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

int main() {
    // Eingabe lesen
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: Schreibe deinen Code darunter
    // 1. Verwende malloc(), um Speicher für eine Ganzzahl zu allozieren
    // 2. Cast den zurückgegebenen Zeiger zu int*
    // 3. Speichere den Eingabewert im allozierten Speicher
    // 4. Gib den gespeicherten Wert aus
    // 5. Berechne und speichere das Quadrat an derselben Stelle
    // 6. Print the squared value
    
    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 Logik & Ablauf

Übe selbstständig: Online-C-Compiler