...
Ohjelma
...
varaa
...
käyttöönsä
...
muistia,
...
jossa
...
muuttujat
...
ja
...
ohjelma
...
voivat
...
toimia.
...
Muuttujille
...
varattu
...
muisti
...
jakaantuu
...
kahteen
...
osaan
...
:
...
...
...
...
Pinoon
...
talletetaan
...
paikalliset
...
muuttujat
...
sekä
...
funktiokutsujen parametrit
...
ja
...
funktioiden
...
paluuosoitteet.
...
Pinoa
...
ohjaa
...
pino-osoitin
...
, joka
...
näyttää
...
pinon
...
päällimmäiseen
...
tietoon.
...
Pino
...
toimii
...
automaattisesti,
...
eikä
...
ohjelmoija ohjaa
...
sitä
...
ohjelman
...
sisältä.
...
Keko
...
on
...
toinen
...
tietovarasto,
...
johon
...
säilötään
...
yhteiset
...
muuttujat
...
sekä
...
sieltä
...
voidaan
...
varata
...
muistia
...
dynaamisesti
...
muutujien
...
käyttöön.
...
Ongelmana
...
on
...
se
...
,
...
että
...
kaikki
...
osoitukset
...
kekoon
...
täytyy
...
tehdä
...
osoitteiden
...
avulla
...
ja
...
kaikki
...
muisti
...
on
...
varattava
...
ennen
...
käyttöä.
...
Lisäksi
...
ohjelman
...
on
...
muistettava
...
kaikki
...
varauksensa,
...
jottei
...
muistia
...
hukata.
...
Käsiteltäessä
...
pitkiä
...
merkkijonoja
...
tai
...
tietueita,
...
kannataa
...
niille
...
varata
...
erikseen
...
muistialueet
...
keosta.
Anchor | ||||
---|---|---|---|---|
|
Muistin varaus pinosta (stack)
...
Anchor | ||||
---|---|---|---|---|
|
Muistin varaukset keosta (heap)
Otsikkotiedosto malloc.h
...
sisältää
...
muistin
...
varaukseen
...
eli
...
allokointiin
...
useita funktioita
...
esim. seuraavat:
alloc()
calloc()
malloc()
free()
Esimerkki 1
Code Block |
---|
int puskuri = (int*)malloc(10*sizeof(int)); // Varataan muistia 10 intille
//assert(puskuri != NULL);
if (puskuri == NULL)
{
printf("Virhe varatessa muistia\n\n");
exit(-1);
}
|
Esimerkki 2
Seuraavana on esimerkki malloc()
allokointi-funktion käytöstä, joka varaa muistia toisesta 64 kb muistilohkosta.
Funktio varaa osoittimelle pTuotteet tilaa VuoronTiedot tietueen verran:
Code Block |
---|
if • alloc • calloc • malloc • free Seuraavana on esimerkki \_fmalloc allokointi-funktion käytöstä, joka varaa muistia toisesta 64 kb muistilohkosta. Funktio varaa osoittimelle pTuotteet tilaa VuoronTiedot tietueen verran. if((pTuotteet = \_fmalloc( 1 * sizeof (struct VuoronTiedot))) == NULL) { { printf("Allokointivirhe \!\!\!"); exit(1); } |
Funktio
...
varaa
...
osoittimelle
...
OsSiirtoVektori
...
tilaa
...
100
...
merkkiä:
Code Block |
---|
if . if(OsSiirtovektori = \_fmalloc( 100 * sizeof(char)) == NULL) { { printf("Allokointivirhe \!\!\!"); exit(1); }} |