C++-manual
Förutgående | Kapitel 12. Dynamisk minneshantering | Nästa

# Minneshantering på C:s vis

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:

    int * Pekare = new int;

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:

    free (pekare);

För att frigöra t.ex. ovanstående `Text` kan man göra på följande sätt:

    free ( Text );

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:

    #include <stdlib.h>

Förutgående | Hem | Nästa
Vanliga fel | Upp | Kompilera C++-program