Eftersom detta är ett kompendium som behandlar C++ används operatorerna new
och delete genomgående för att allokera och frigöra minne. Dessa operatorer
är dock en nyhet som kommit i och med C++. I standard C använder man några funktioner för samma
ändamål. Dessa funktioner är dock svårare att använda, och det rekommenderas att man använder C++:s
motsvarigheter. Allmänt allokerar man minne enligt följande syntax:
datatyp * = (datatyp) malloc (antal_bytes); |
Funktionen heter malloc(), och tar som parameter ett tal som berättar antalet
bytes som skall allokeras. För att få reda på antalet bytes en viss datatyp upptar kan man använda
sizeof(). Ett extra problem är att malloc() returnerar
en void *, d.v.s. en pekare till ett minnesområde utan datatyp. Denna pekare
måste typomvandlas (typecast) för att "passa" den pekare som skall användas. För att t.ex. allokera
en int används föjande:
int * Pekare = (int *)malloc ( sizeof (int) ); |
En hel del fulare än:
Det är viktigt att storleken ges rätt, om den är för liten får man nästan garanterat problem då man
försöker fylla minnet. Att allokera en int enligt nedanstående är helt fel:
int * Pekare = (int *)malloc ( 1 ); |
eftersom man då får endast en byte, och en int troligtvis behöver
fyra. Allokering av vektorer kan man göra genom att multiplicera det antal bytes ett element i
vektorn behöver med det antal element man vill ha. Allokering av 100 char kan
göras på följande sätt:
char * Text = (char *) malloc ( sizeof (char) * 100 ); |
Alternativt kan man använda funktionen calloc, som tar två parametrar:
datatyp * = (datatyp) malloc (antal_element, bytes_per_element); |
Samma vektor kan då allokeras på följande sätt:
char * Text = (char *) calloc ( 100, sizeof (char) ); |
Man bör även under C:s minneshantering frigöra allokerat minne. Detta görs med funktionen
free(), som allmänt används enligt följande:
För att frigöra t.ex. ovanstående Text kan man göra på följande sätt:
Alla dessa funktioner finns definierade i headerfilen stdlib.h, så man behöver
därför följande definition i början på varje fil som använder minnesallokering på C:s vis: