Programmieren in C

Dynamische Speicherverwaltung III – realloc

Wenn du bereits weißt wie man Speicher reserviert und freigibt, lernst du nun in diesem Beitrag wie man ihn zusätzlich manipulieren kann.

Anpassung des Speicherbereichs durch realloc

Wie alle Funktionen zur dynamischen Speicherverwaltung finden wir auch realloc in der Standard-Bibliothek. Ihr Prototyp sieht in etwa so aus:

Dynamische Speicherverwaltung, realloc
Prototyp realloc

Ablauf der Speichermanipulation

Aber was macht sie überhaupt und wie verwendest du sie? Realloc versucht deinen bereits durch malloc oder calloc reservierten dynamischen Speicherbereich anzupassen, indem sie ihn vergrößert oder verkleinert. Was von beidem der Fall ist, hängt von den angegebenen Parametern, im Speziellen der Bezeichnung des gewünschten Bereiches und der gewünschten Größe dieses Bereiches, ab. Gibst du hier nur Blödsinn ein oder die Ausführung scheitert aus einem anderen Grund, erhältst du als Rückgabe den Wert NULL und der gesamte Bereich bleibt unberührt.

Dynamische Speicherverwaltung, realloc
Bei Eingabe von ungültigen Werten ist der Rückgabewert NULL

Hältst du dich aber an alle Vorschriften und es treten auch keine sonstigen Fehler auf, erhältst du dagegen die Adresse des neu reservierten Speicherplatzes zurück.

Dynamische Speicherverwaltung, realloc
Korrekte Eingabe liefert die Adresse des neu reservierten Speicherplatzes

Umwandlung von realloc in malloc oder free

Zusätzlich dazu kann realloc aber auch mit ungültigem p gültige Werte liefern. Das ist dann der Fall, wenn p entweder NULL ist oder size 0 beträgt. Ist ersteres der Fall, fungiert realloc nicht als Speichermanipulation, sondern als Speicherreservierung, denn sie wird praktisch zu malloc. Tritt letzterer Fall ein, funktioniert realloc wie das Gegenteil einer Reservierung, denn sie gibt nun den reservierten Platz wieder frei und wird damit effektiv zu free.

Dynamische Speicherverwaltung, realloc
Ungültiges p kann realloc in malloc oder free umwandeln

Anwendung realloc – Beispiel

Aber genug mit der Theorie. Wie sieht so etwas denn in der Praxis aus? Ganz einfach. Entweder so:

Dynamische Speicherverwaltung, realloc
Anwendung realloc

oder so:

Dynamische Speicherverwaltung, realloc
Anwendung realloc

Es handelt sich also entweder um eine Vergrößerung oder eine Verkleinerung des Speichers. Im ersten Fall wird sofort versucht, den vorhandenen Speicherblock zusammenhängend zu erweitern. Ist das nicht möglich, z.B. weil dort bereits ein Datensatz gespeichert ist, wird stattdessen ein komplett neuer Speicherbereich in der gewünschten Größe an einem anderen Punkt reserviert. Der alte Bereich wird dann freigegeben.

Dynamische Speicherverwaltung, realloc
Vergrößerung des Speichers

Verkleinerst du den vorhandenen Speicher, kannst du dir das vorstellen, als würdest du einfach den nicht mehr benötigten Teil des reservierten Speicherbereiches abschneiden. Der Inhalt des übrig gebliebenen Bereichs bleibt erhalten, der restliche Speicher wird erneut freigegeben.

Dynamische Speicherverwaltung, realloc
Verkleinerung des Speichers

Super, jetzt weißt du auch was es mit der Speicherverwaltung realloc auf sich hat und kannst sie gleich anwenden.

Hallo, leider nutzt du einen AdBlocker.

Auf Studyflix bieten wir dir kostenlos hochwertige Bildung an. Dies können wir nur durch die Unterstützung unserer Werbepartner tun.

Schalte bitte deinen Adblocker für Studyflix aus oder füge uns zu deinen Ausnahmen hinzu. Das tut dir nicht weh und hilft uns weiter.

Danke!
Dein Studyflix-Team

Wenn du nicht weißt, wie du deinen Adblocker deaktivierst oder Studyflix zu den Ausnahmen hinzufügst, findest du hier eine kurze Anleitung. Bitte lade anschließend die Seite neu.