Deutsche Lernausgabe
Dynamischer Speicher in C: malloc und calloc
Reservieren, vergrößern und befreien Sie Speicher mit Größen- und Fehlerprüfungen.

malloc reserviert einen Block mit unbestimmtem Anfangsinhalt. calloc reserviert mehrere Elemente und setzt ihre Bytes auf null. Lesen Sie malloc-Speicher nicht vor der Initialisierung; Nullbytes garantieren nicht universell die Darstellung aller Typen.
Prüfen Sie das Ergebnis und berechnen Sie Größen ohne Überlauf. Behalten Sie bei realloc den ursprünglichen Zeiger bis zum Erfolg: Schlägt die Operation bei positiver Größe fehl, bleibt der alte Block gültig.
Geben Sie jeden Block nach der Nutzung genau einmal frei. Greifen Sie nach free nicht mehr zu und geben Sie weder automatischen Speicher noch innere Adressen frei. Reale Programme müssen Reservierungsfehler behandeln.
Quellcode
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
size_t count = 4;
int *scores = calloc(count, sizeof *scores);
if (scores == NULL) {
fputs("Allocation failed.\n", stderr);
return 1;
}
scores[2] = 9;
for (size_t i = 0; i < count; ++i) {
printf("%d%s", scores[i], i + 1 == count ? "\n" : " ");
}
free(scores);
return 0;
}Im Compiler öffnenHäufige Fragen
Warum bleiben Code und manche Ausgaben englisch?
C-Schlüsselwörter, Bezeichner, Programmkommentare und erwartete Ausgaben bleiben wie im Original, damit der Code ausführbar und die Tests konsistent bleiben. Erklärungen und Aufgabenstellungen sind übersetzt.