Dynamische Speicherverwaltung

In C kann Speicher während der Laufzeit dynamisch reserviert und wieder freigegeben werden. Diese Lektion behandelt malloc, calloc, realloc und free.

1. Speicher reservieren: malloc

malloc reserviert einen Block zusammenhängenden Speichers und gibt einen Zeiger auf den Anfang zurück.
int *p = (int*) malloc(5 * sizeof(int));
if(p == NULL) {
    perror("Speicher konnte nicht reserviert werden");
    return 1;
}

2. Speicher reservieren und initialisieren: calloc

calloc reserviert Speicher für ein Array und initialisiert alle Bits auf 0.
int *arr = (int*) calloc(5, sizeof(int));
for(int i=0; i<5; i++) {
    printf("%d ", arr[i]); // Ausgabe: 0 0 0 0 0
}

3. Speicher vergrößern oder verkleinern: realloc

realloc passt die Größe eines zuvor reservierten Speicherblocks an.
arr = (int*) realloc(arr, 10 * sizeof(int));
if(arr == NULL) {
    perror("Speicher konnte nicht vergrößert werden");
    return 1;
}

4. Speicher freigeben: free

Reservierter Speicher muss mit free wieder freigegeben werden.
free(arr);
arr = NULL; // Dangling Pointer vermeiden

5. Tipps für dynamische Speicherverwaltung

6. Zusammenfassung