Ein Array allozieren
Reservieren Sie Speicher auf dem Heap.
Ein Array allozieren ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum dynamische Arrays?
Ein gewöhnliches Array hat eine zur Kompilierzeit festgelegte Größe. Oft wissen Sie jedoch erst während der Programmausführung, wie viele Elemente Sie benötigen.
Dynamische Arrays lösen dieses Problem: Sie fordern zur Laufzeit mit malloc beim Betriebssystem einen Speicherblock an und bestimmen die Größe mit einer Variable.
malloc kennenlernen
malloc (memory allocate) befindet sich in <stdlib.h>. Sie übergeben die Anzahl der Bytes, und die Funktion gibt einen Zeiger auf diesen Block zurück oder NULL, wenn die Reservierung fehlschlägt.
Der Speicher stammt aus dem Heap und bleibt erhalten, bis Sie ihn freigeben.
int *p = malloc(10 * sizeof(int));Größe mit sizeof bestimmen
Tragen Sie Byte-Anzahlen niemals fest ein. Verwenden Sie sizeof, damit Ihr Code auf verschiedenen Plattformen korrekt bleibt.
Um Speicherplatz für n Integer zu reservieren, multiplizieren Sie n mit sizeof(int). Ein häufig verwendetes Idiom ist n * sizeof(*p), das den Typ des Zeigers selbst verwendet.
int *p = malloc(n * sizeof(*p));Immer auf NULL prüfen
Wenn kein Speicher mehr verfügbar ist, gibt malloc NULL zurück. Das Dereferenzieren eines NULL-Zeigers bringt Ihr Programm zum Absturz.
Prüfen Sie das Ergebnis, bevor Sie es verwenden. Diese einfache Gewohnheit verhindert viele schwer zu debuggende Fehler.
int *p = malloc(n * sizeof(*p));
if (p == NULL) {
fprintf(stderr, "out of memory\n");
return 1;
}Eine vollständige Speicherreservierung
Hier ist ein vollständiges Programm, das Platz für 5 Integer reserviert, sie füllt und ausgibt.
Beachten Sie die Symmetrie: malloc am Anfang, free am Ende.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n = 5;
int *a = malloc(n * sizeof(*a));
if (!a) return 1;
for (int i = 0; i < n; i++) a[i] = i * i;
for (int i = 0; i < n; i++) printf("%d\n", a[i]);
free(a);
return 0;
}malloc setzt nicht auf null
Der von malloc zurückgegebene Speicher ist nicht initialisiert: Er enthält beliebige Daten, die sich zuvor dort befanden.
Wenn Sie ihn vor dem Schreiben lesen, erhalten Sie unvorhersehbare Werte. Weisen Sie jedem Element immer einen Wert zu, bevor Sie es lesen.
int *a = malloc(3 * sizeof(*a));
/* a[0], a[1], a[2] hold garbage here */
a[0] = 10;calloc setzt Werte auf null
calloc(count, size) reserviert Platz für count Elemente mit jeweils size Bytes und setzt jedes Byte auf null.
Verwenden Sie es, wenn Sie ein sauberes, mit null gefülltes Array benötigen. Außerdem schützt es vor einem Überlauf bei der Multiplikation.
int *a = calloc(5, sizeof(*a));
/* every element is now 0 */calloc in Aktion
Dieses Programm verwendet calloc und bestätigt, dass das Array anfangs nur Nullen enthält, bevor wir es ändern.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n = 4;
int *a = calloc(n, sizeof(*a));
if (!a) return 1;
for (int i = 0; i < n; i++) printf("%d\n", a[i]);
free(a);
return 0;
}Den Speicherblock indizieren
Ein Zeiger auf einen Heap-Block verhält sich genau wie ein Array-Name. Mit a[i] können Sie jedes Element von 0 bis n-1 lesen und schreiben.
Intern ist a[i] dasselbe wie *(a + i).
int *a = malloc(3 * sizeof(*a));
a[0] = 1;
*(a + 1) = 2; /* same as a[1] = 2 */
a[2] = 3;Auf die Grenzen achten
Wenn Sie n Elemente reservieren, sind die gültigen Indizes 0 bis n-1. Das Schreiben nach a[n] führt zu undefiniertem Verhalten.
C prüft die Grenzen nicht für Sie. Ein Off-by-one-Fehler kann den Speicher daher unbemerkt beschädigen.
int *a = malloc(3 * sizeof(*a));
a[2] = 99; /* OK, last valid index */
/* a[3] = 0; BUG: out of bounds */Die Größe zur Laufzeit einlesen
Die eigentliche Stärke besteht darin, dass die Größe aus einer Eingabe, einer Datei oder einer Berechnung stammen kann. Derselbe Code reserviert Platz für 2 oder für 2 Millionen Elemente.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n = 6; /* could be scanf'd */
long *a = malloc(n * sizeof(*a));
if (!a) return 1;
long sum = 0;
for (int i = 0; i < n; i++) { a[i] = i + 1; sum += a[i]; }
printf("%ld\n", sum);
free(a);
return 0;
}Kurze Überprüfung
Testen Sie Ihr Verständnis der Speicherreservierung.
Zusammenfassung
Sie reservieren ein dynamisches Array mit malloc(n * sizeof(*p)) oder ein mit null gefülltes Array mit calloc(n, sizeof(*p)).
Prüfen Sie immer auf NULL, denken Sie daran, dass malloc Speicher mit beliebigen Inhalten liefert, und verwenden Sie Indizes von 0 bis n-1. Zu jeder Speicherreservierung gehört ein free. Als Nächstes lernen Sie, einen Block zu vergrößern und dabei seine Daten zu behalten.
Häufig gestellte Fragen
Ist die Lektion „Ein Array allozieren“ kostenlos?
Ja — der vollständige Text von „Ein Array allozieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Ein Array allozieren“?
Reservieren Sie Speicher auf dem Heap. Du übst C Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C Academy zu starten?
Keine Vorkenntnisse erforderlich. C Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Ein Array allozieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C Academy-Lektion Code schreiben und ausführen?
Ja. Jede C Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Ein Array allozieren
- Mit realloc vergrößern
- Ein wiederverwendbarer Vektortyp
- Freigeben und Leaks vermeiden