In der letzten Tafelübung haben wir euch bereits die Funktion M patients centers and c-
aloc vorgestellt, mit denen ihr euch dynamisch zur Laufzeit Speicher vom System anfordern
könnt.
In Ergänzung dazu, wollen wir euch diesmal die Re-aloc-Funktion vorstellen, mit denen
ihr die angeforderte Speicher- bereiche zur Laufzeit wieder vergrößern könnt.
Als Voraussetzung dafür gilt, dass die Speicherbereiche vorher entweder von malloc und c-alloc oder
durch die realloc-Funktion selber allokiert wurden.
Dabei funktioniert realloc so, dass die Funktion als erstes Argument einem Zeiger auf ein Stück
Speicher erwartet, das durch eine der vorher genannten Funktionen allokiert wurde.
Als zweites Argument wird eine neue Größe angegeben, auf die das Stück Speicher entweder
vergrößert oder verkleinert werden soll.
Was realloc dann macht, ist, dass es einen neuen Speicherbereich allokiert, der eben
so groß ist wie angefordert und dass es den Inhalt des alten Speichers in den neuen
hinein kopiert. Im Erfolgsfall wird zusätzlich noch der alte Speicherbereich wieder freigegeben.
Anschließend wird ein Zeiger auf den neuen Speicherbereich als Rückgabewert zurückgegeben.
Dabei ist zu beachten, dass das Kopieren der Daten relativ aufwendig sein kann, wenn es
sich dabei um große Mengen handelt. Eine Besonderheit der Realloc-Funktion ist,
dass sie sich genauso verhält wie malloc, wenn man als erstes Argument nicht etwa einen
Zeiger zu einem schon allokierten Stück Speicher angibt, sondern einen Nullpointer.
Sollte die Realloc-Funktion fehlschlagen, gibt sie als Rückgabewert Null zurück.
Und außerdem wird der Speicher dadurch, dass das erste Argument referenziert wird, nicht freigegeben.
Zugänglich über
Offener Zugang
Dauer
00:01:50 Min
Aufnahmedatum
2020-05-13
Hochgeladen am
2020-05-13 09:06:16
Sprache
de-DE