Menu
Coddy logo textTech

Speicher freigeben mit free()

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

Wenn du dynamisch Speicher mit malloc() zuweist, bleibt dieser Speicher zugewiesen, bis du ihn ausdrücklich freigibst. Die Funktion free() ist dein Werkzeug, um dynamisch zugewiesenen Speicher an das System zurückzugeben, wenn du ihn nicht mehr verwendest.

Die Funktion free() akzeptiert ein Argument: einen Zeiger auf den Speicherblock, den du freigeben möchtest. Dies muss derselbe Zeiger sein, der von malloc() (oder verwandten Funktionen wie calloc()) zurückgegeben wurde.

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Speicher zuweisen
*ptr = 42;  // Den Speicher verwenden
free(ptr);  // Den Speicher freigeben, wenn fertig

Wenn du free() nicht aufrufst, entsteht etwas, das als Speicherleck bezeichnet wird. Der reservierte Speicher bleibt von deinem Programm belegt, obwohl du ihn nicht mehr verwendest. In lang laufenden Programmen oder Programmen, die wiederholt Speicher reservieren, können diese Lecks den gesamten verfügbaren Systemspeicher aufbrauchen und zu Leistungsproblemen oder Abstürzen führen.

Denke daran: Jedem malloc() sollte ein entsprechendes free() zugeordnet sein. Diese Zuordnung ist für eine verantwortungsvolle Speicherverwaltung in der C-Programmierung unerlässlich.

challenge icon

Aufgabe

Einfach

Schreibe ein C-Programm, das den vollständigen Lebenszyklus der dynamischen Speicherzuweisung und -freigabe demonstriert. Dein Programm sollte:

  1. Ein count vom Benutzer einlesen, das angibt, wie viele integers gespeichert werden sollen
  2. malloc() mit sizeof() verwenden, um dynamisch memory für ein Array aus count integers zuzuweisen
  3. Prüfen, ob die memory-allocation successful war – falls sie fehlschlägt, Memory allocation failed! ausgeben und das Programm beenden
  4. Wenn die allocation erfolgreich ist, Memory allocated successfully! ausgeben
  5. count ganzzahlige Werte vom Benutzer einlesen und in dem zugewiesenen Array speichern
  6. Die Summe aller Werte berechnen und im folgenden Format ausgeben: Sum: [value]
  7. Den maximalen Wert ermitteln und im folgenden Format ausgeben: Maximum: [value]
  8. free() verwenden, um den memory freizugeben
  9. Memory freed successfully! ausgeben, um die Bereinigung zu bestätigen

Denke daran, den Header <stdlib.h> einzubinden, um malloc() und free() zu verwenden. Diese Herausforderung demonstriert die wesentliche Kombination aus malloc() und free(), um memory-Leaks in deinen Programmen zu verhindern.

Wenn die Eingabe beispielsweise lautet:

4
15 8 23 12

Deine Ausgabe sollte lauten:

Memory allocated successfully!
Sum: 58
Maximum: 23
Memory freed successfully!

Diese Herausforderung festigt das wichtige Konzept, dass jeder dynamisch zugewiesene memory-Block ordnungsgemäß freigegeben werden muss, sobald er nicht mehr benötigt wird, und damit den verantwortungsvollen memory-Verwaltungszyklus in der C-Programmierung abschließt.

Probier es selbst

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

int main() {
    int count;
    
    // Lies die Anzahl der zu speichernden Ganzzahlen
    scanf("%d", &count);
    
    // TODO: Schreibe deinen Code darunter
    // 1. Speicher mit malloc() und sizeof() allozieren
    // 2. Prüfe, ob die Allokation erfolgreich war
    // 3. Lies die Ganzzahlwerte und speichere sie
    // 4. Berechne die Summe und finde das Maximum
    // 5. Gib den allozierten Speicher frei
    
    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