Video

Dynamische Speicherverwaltung II – calloc

In diesem Beitrag erklären wir dir diesmal wie die dynamische Speicherverwaltung calloc funktioniert.

Inhaltsübersicht

Schema zur allgemeinen Speicherreservierung

Zunächst ist es wichtig zu wissen, dass es für die Speicherreservierung ein allgemeines Schema gibt, das du später auf die anderen möglichen Arbeitsweisen übertragen kannst. Als Erstes rufst du eine Bibliotheksfunktion auf, die entweder Speicher reserviert, oder für dessen Erweiterung oder Verringerung zuständig ist. Der Rückgabewert wird an spezifische Zeiger zurückgegeben. Dabei erfolgt eine automatische Umwandlung.

Dynamische Speicherverwaltung, calloc
direkt ins Video springen
Der Rückgabewert wird an den spezifischen Zeiger zurückgegeben

Fehlerbehandlung und Dereferenzierung

War unsere Reservierung nicht erfolgreich greifen wir dennoch den Rückgabewert ab und führen eine entsprechende Fehlerbehandlung durch. Danach speichern und verwalten wir die Werte des reservierten Bereiches über ganz normale Dereferenzierung.

Dynamische Speicherverwaltung, calloc
direkt ins Video springen
Fehlerbehandlung und Dereferenzierung

Hast du dann alle deine Befehle, die diesen Speicherbereich betreffen, abgewickelt und brauchst diesen daher nicht mehr, musst du nur noch den reservierten Speicher wieder freigeben.

Studyflix vernetzt: Hier ein Video aus einem anderen Bereich

Speicherverwaltung calloc als Ergänzung zu malloc

Diese Methode kannst du nicht nur auf malloc anwenden, sondern auch auf calloc. Aber was ist calloc überhaupt?

calloc ist eine Funktion, die ebenfalls Speicher reserviert. Jedoch ist sie dabei etwas fleißiger als malloc. Deswegen reserviert sie für uns nicht nur die gewünschte Menge an Speicherplatz, sondern füllt diesen auch mit Nullen auf. Das ist deshalb so praktisch, da dabei dafür gesorgt wird, dass der Nonsens, der vor der Reservierung in den Zellen stand, überschrieben wird.

Dynamische Speicherverwaltung, calloc
direkt ins Video springen
calloc reserviert Speicherplatz und füllt ihn mit Nullen auf

Wenn du das Ganze dann anwendest, sieht es so aus:

Dynamische Speicherverwaltung, calloc
direkt ins Video springen
Anwendung von calloc

Im Vergleich zu unserem vorherigen Beispiel verändert sich nicht viel. Wir müssen lediglich die Wertzuweisung für array anpassen, denn calloc hat im Gegensatz zu malloc zwei einzelne Eingabeparameter. Was ist aber nun das zweite? Ganz einfach. Statt die Länge des benötigten Speicherbedarfs selbst mit einer Multiplikation zu errechnen, können wir das hier einfach auslagern. Das tun wir,  indem wir als ersten Parameter die Größe der zu speichernden Module angeben und als  Zweites die Menge der gewünschten Module einschreiben.

Dynamische Speicherverwaltung, calloc
direkt ins Video springen
Anpassung der Wertzuweisung für array

Auch nach unserem Aufruf bleibt alles andere beim Alten und das Programm verläuft praktisch identisch. Du siehst: Es ist ganz einfach, dein Programm so anzupassen, dass du den Nonsens aus deinem Speicher loswirst und dennoch ein einfaches Programm behalten kannst.

Dynamische Speicherverwaltung, calloc
direkt ins Video springen
calloc ist nahezu identisch zu malloc

Nun hast du dein Wissen passend ergänzt und weißt auch wie die dynamische Speicherverwaltung calloc abläuft.

Dynamische Speicherverwaltung II – calloc — häufigste Fragen

(ausklappen)
  • Was ist der Unterschied zwischen malloc und calloc?
    Der Unterschied zwischen malloc und calloc ist, dass calloc den reservierten Speicher zusätzlich mit Nullen initialisiert, während malloc nur reserviert und der Inhalt undefiniert bleibt. Beide liefern einen Zeiger auf den Speicherbereich zurück, der später mit free wieder freigegeben werden muss.
  • Wann sollte calloc verwendet werden?
    calloc verwendet man, wenn die neu angelegten Daten direkt den Startwert 0 haben sollen, zum Beispiel bei einem frisch angelegten int-Array, das zunächst nur leere Zähler enthält. Dann muss man die Elemente nicht erst in einer Schleife auf 0 setzen.
  • Welche Bedeutung haben die 2 Parameter von calloc?
    Die 2 Parameter von calloc sind erstens die Anzahl der Elemente und zweitens die Größe eines Elements in Bytes. Deshalb schreibt man für ein int-Array mit n Elementen zum Beispiel: int *a = calloc(n, sizeof *a); Vertauschte Parameter führen zu einer falschen Speichergröße.
  • Wie prüft man in C, ob calloc erfolgreich war?
    Ob calloc erfolgreich war, prüft man, indem man den Rückgabewert mit NULL vergleicht. Liefert calloc NULL, konnte kein Speicher reserviert werden. Beispiel: int *a = calloc(n, sizeof *a); if (a == NULL) { /* Fehler behandeln */ }.

Speicherverwaltung verstehen

calloc gehört zur dynamischen Speicherverwaltung in C und ist ein wichtiges Thema beim Arbeiten mit Zeigern und Arrays. Du vergleichst in diesem Themenfeld Funktionen zum Reservieren, Nutzen und Freigeben von Speicher. So wird klar, wie Programme Speicher zur Laufzeit verwalten und warum sich einzelne Funktionen in ihrem Verhalten unterscheiden. Im Informatikbereich findest du passende Videos zu diesem und verwandten Themen.

Lernen lohnt sich! Entdecke hier deine Chancen.