Menu
Coddy logo textTech

Überprüfung auf Allokationsfehler

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

Obwohl malloc() ein leistungsstarkes Werkzeug für die dynamische Speicherzuweisung ist, musst du eine wichtige Tatsache verstehen: malloc() kann fehlschlagen. Wenn dem System kein verfügbarer Speicher mehr zur Verfügung steht, kann malloc() deine Anfrage nicht erfüllen und gibt stattdessen NULL anstelle einer gültigen Speicheradresse zurück.

Das bedeutet, dass du jedes Mal, wenn du malloc() verwendest, überprüfen musst, ob der Aufruf erfolgreich war, bevor du versuchst, den zurückgegebenen Zeiger zu verwenden. Die Verwendung eines NULL-Zeigers führt dazu, dass dein Programm mit einem Speicherzugriffsfehler abstürzt.

int *ptr = (int*)malloc(sizeof(int));

if (ptr == NULL) {
    printf("Memory allocation failed!\n");
    return -1;  // Beende das Programm oder behandle den Fehler
}

// Hier kann ptr sicher verwendet werden
*ptr = 42;

Diese NULL-Prüfung ist nicht optional – sie ist entscheidend für das Schreiben robuster C-Programme. Auch wenn Fehler bei der Speicherzuweisung auf modernen Systemen selten sind, können sie auftreten, insbesondere in ressourcenbeschränkten Umgebungen oder wenn große Mengen an Speicher angefordert werden. Professioneller C-Code enthält immer diese Prüfungen, um Abstürze zu verhindern und eine ordnungsgemäße Fehlerbehandlung zu ermöglichen.

challenge icon

Aufgabe

Einfach

Schreibe ein C-Programm, das die korrekte Fehlerbehandlung bei der Verwendung von malloc() für die dynamische Speicherzuweisung demonstriert. Dein Programm sollte:

  1. Eine Ganzzahl n vom Benutzer einlesen, die die Anzahl der zu speichernden Ganzzahlen angibt
  2. malloc() zusammen mit sizeof() verwenden, um dynamisch Speicher für ein Array aus n Ganzzahlen zuzuweisen
  3. Überprüfen, ob die Speicherzuweisung erfolgreich war, indem getestet wird, ob der zurückgegebene Zeiger NULL ist
  4. Wenn die Zuweisung fehlschlägt, Memory allocation failed! ausgeben und das Programm beenden
  5. Wenn die Zuweisung erfolgreich ist, Memory allocation successful! ausgeben
  6. n ganzzahlige Werte vom Benutzer einlesen und sie im zugewiesenen Array speichern
  7. Die Summe aller Werte berechnen und im Format Sum: [value] ausgeben
  8. Die insgesamt zugewiesene Bytemenge im Format Bytes allocated: [value] ausgeben

Denke daran, den Header <stdlib.h> einzubinden, um malloc() verwenden zu können. Dein Programm muss die grundlegende Praxis demonstrieren, vor dem Versuch, den zugewiesenen Speicher zu verwenden, auf einen Fehler bei der Speicherzuweisung zu prüfen.

Wenn die Eingabe beispielsweise lautet:

4
10 20 30 40

sollte deine Ausgabe wie folgt aussehen:

Memory allocation successful!
Sum: 100
Bytes allocated: 16

Diese Aufgabe unterstreicht die entscheidende Bedeutung defensiver Programmierung bei der Arbeit mit dynamischer Speicherzuweisung und stellt sicher, dass deine Programme potenzielle Fehler bei der Speicherzuweisung ordnungsgemäß behandeln, anstatt unerwartet abzustürzen.

Probier es selbst

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

int main() {
    // Lese die Anzahl der Ganzzahlen
    int n;
    scanf("%d", &n);
    
    // TODO: Schreibe deinen Code hier
    // - Verwende malloc(), um Speicher für n Ganzzahlen zu allokieren
    // - Prüfe, ob die Allokation erfolgreich war
    // - Behandle sowohl Erfolgs- als auch Fehlerfälle
    // - Lies die Ganzzahlen und speichere sie
    // - Calculate the sum and bytes allocated
    
    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