Memset, Realloc, etc.
← Speicherverwaltung: Free | ● | Sieb des Eratosthenes →
Arrays von beliebigen Datentypen lassen sich über die Größe des belegten Speicherbereichs allozieren.
#include <stdlib.h>
int *ptr;
int n=1000;
assert(ptr=(int *)malloc(n*sizeof(int)));
Bemerkung: Die Speicherallozierung kostet Rechenzeit, man sollte so wenige malloc-Aufrufe wie möglich benutzen, also immer einen möglichst großen Block auf einmal allozieren.
Ein undefinierter Speicherbereich läßt sich mit der Funktion memset()
vorbelegen:
Alternativ reserviert die Funktion calloc()
Speicher und initialisert ihn auf 0:
Die Größe läßt sich zur Laufzeit mit der Funktion realloc()
anpassen:
assert(ptr=(int *)realloc(ptr, m*sizeof(int)));
Hinweis: realloc(NULL, ...)
entspricht malloc(...)
Der Inhalt des vorhandenen Speicherbereichs bleibt erhalten. Die Adresse kann sich ändern, wenn der Inhalt umkopiert werden muss. Der Inhalt des dazugekommenen Speichers ist undefiniert.
Der undefinierte Speicherbereich kann mit der Funktion memcpy()
kopiert werden:
Fallgrube: Die beiden zu kopierenden Speicherbereiche dürfen sich nicht überlappen, sonst bedarf es der memmove()
Funktion.