Es ist etwas langweilig (obwohl nicht überflüssig), Zeiger ausschließlich dazu zu verwenden, um Adressen von bereits anderweitig bekannten Objekten zu speichern. Interessanter ist es, mit Objekten zu arbeiten, die erst während der Laufzeit des Programmes bei Bedarf erzeugt, und, wenn die Objekte nicht mehr benötigt werden, wieder zerstört werden.
Eine Art solcher Variablen sind die lokalen Variablen einer Funktion. Wird die Funktion betreten, werden diese automatisch erzeugt, wird die Funktion verlassen, werden sie automatisch wieder zerstört. Um dynamisch Variablen zu erzeugen, die auch das Ende der erzeugenden Funktion überleben, muß man sich in C anderer Mittel bedienen, den Speicherverwaltungsfunktionen malloc (Memory ALLOCate) und free. malloc erhält als Funktionsparameter die Anzahl an Bytes, die benötigt wird, sucht den Speicher nach einem unbenutzten Platz ebendieser Größe ab, und gibt, so ein solcher gefunden wurde, seine Adresse zurück. Diese kann man nun in einer Pointervariable speichern.
free erhält als Parameter ebendiesen Pointer, und markiert den zuvor allozierten (uns als belegt markierten) Speicher wieder als frei verfügbar, sodaß evtl. ein späteres malloc diesen wieder verwenden kann.
Um herauszufinden, wieviel Bytes man denn nun für ein Objekt eines bestimmten Typsbenötigt, stellt C den Operator sizeof zur Verfügung. Er kann mit dem Namen eines Typs oder eienr Variablen aufgerufen werden, und liefert die benötigte Speichergröße.
int * ip; ... ... ip = malloc(sizeof(int)); *ip=...; free(ip);
Nach einem free darf auf keinen Fall der Pointer erneut dereferenziert werden. Beim lesen ist das Ergebnis undefiniert, beim Schreiben wird mit ziemlicher Sicherheit das Speicherverwaltungssystem durcheinandergebracht, was im besten Falle zu einem Programmabsturz führt. Dieser geschieht oft wesentlich später und nicht unbedingt im Zusammenhang mit dem fehlerhaften Code, sodaß solche Fehler oft schwer zu finden sind.
Der Rückgabewert von malloc ist unbedingt auf NULL zu testen. NULL wird dann von malloc zurückgegeben, wenn kein SPeicher entsprechender Größe gefunden werden konnte.