Dynamische Speicherzuweisung für Arrays
In diesem Schritt lernen Sie, wie Sie in der C-Programmierung dynamisch Speicher für Arrays zuweisen können, indem Sie die Funktionen malloc()
, realloc()
und free()
verwenden. Die dynamische Speicherzuweisung ermöglicht es Ihnen, Arrays mit Größen zu erstellen, die zur Laufzeit bestimmt werden.
Erstellen wir eine neue C-Datei, um die dynamische Speicherzuweisung zu untersuchen:
cd ~/project
touch dynamic_array.c
Nun schreiben wir ein Programm, das die dynamische Speicherzuweisung für Arrays demonstriert:
#include <stdio.h>
#include <stdlib.h>
int main() {
// Dynamische Speicherzuweisung für ein Integer-Array
int array_size;
printf("Enter the number of elements: ");
scanf("%d", &array_size);
// Dynamisch Speicher zuweisen
int *dynamic_array = (int *)malloc(array_size * sizeof(int));
// Prüfen, ob die Speicherzuweisung erfolgreich war
if (dynamic_array == NULL) {
printf("Memory allocation failed!\n");
return 1;
}
// Eingabe der Array-Elemente
printf("Enter %d integers:\n", array_size);
for (int i = 0; i < array_size; i++) {
printf("Element %d: ", i + 1);
scanf("%d", &dynamic_array[i]);
}
// Ausgabe der Array-Elemente
printf("\nArray elements:\n");
for (int i = 0; i < array_size; i++) {
printf("%d ", dynamic_array[i]);
}
printf("\n");
// Dynamisch die Größe des Arrays ändern
int new_size;
printf("\nEnter new array size: ");
scanf("%d", &new_size);
// Speicher neu zuweisen
int *resized_array = (int *)realloc(dynamic_array, new_size * sizeof(int));
// Prüfen, ob die Neuzuweisung erfolgreich war
if (resized_array == NULL) {
printf("Memory reallocation failed!\n");
free(dynamic_array);
return 1;
}
dynamic_array = resized_array;
// Wenn die neue Größe größer ist, neue Elemente initialisieren
if (new_size > array_size) {
for (int i = array_size; i < new_size; i++) {
dynamic_array[i] = 0;
}
}
// Ausgabe des neu dimensionierten Arrays
printf("Resized array:\n");
for (int i = 0; i < new_size; i++) {
printf("%d ", dynamic_array[i]);
}
printf("\n");
// Dynamisch zugewiesenen Speicher freigeben
free(dynamic_array);
return 0;
}
Kompilieren und ausführen Sie das Programm:
gcc dynamic_array.c -o dynamic_array
./dynamic_array
Beispielinteraktion:
Enter the number of elements: 3
Enter 3 integers:
Element 1: 10
Element 2: 20
Element 3: 30
Array elements:
10 20 30
Enter new array size: 5
Resized array:
10 20 30 0 0
Wichtige Konzepte der dynamischen Speicherzuweisung:
-
malloc()
-Funktion
- Weist den angeforderten Speicher zu und gibt einen Zeiger zurück
- Syntax:
pointer = (type *)malloc(size * sizeof(type))
- Prüfen Sie immer auf
NULL
, um eine erfolgreiche Zuweisung sicherzustellen
-
realloc()
-Funktion
- Ändert die Größe eines zuvor zugewiesenen Speicherblocks
- Kann die Arraygröße erhöhen oder verringern
- Bewahrt die vorhandenen Daten beim Vergrößern auf
-
free()
-Funktion
- Gibt dynamisch zugewiesenen Speicher frei
- Verhindert Speicherlecks
- Muss für jede
malloc()
/realloc()
-Zuweisung aufgerufen werden
Wichtige Prinzipien der Speicherzuweisung:
- Prüfen Sie immer, ob die Zuweisung erfolgreich war
- Geben Sie dynamisch zugewiesenen Speicher frei, wenn er nicht mehr benötigt wird
- Seien Sie vorsichtig, wenn Sie die Größe von Arrays ändern
- Behandeln Sie potenzielle Zuweisungsfehler gracefully