...
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 |
---|
{anchor:dynaaminen} h2. Muistin varaukset keosta (heap) Otsikkotiedosto malloc.h sisältää muistin varaukseen eli allokointiin useita funktioita esim. seuraavat: * {{alloc()}} * {{calloc()}} * {{malloc()}} * {{free()}} h2. Esimerkki 1 {code} 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); } {code} h2. Esimerkki 2 Seuraavana on esimerkki {{ |
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 ((pTuotteet = _fmalloc(1 * sizeof(struct VuoronTiedot))) == NULL) { printf("Allokointivirhe!!!"); exit(1); } {code} |
Funktio
...
varaa
...
osoittimelle
...
OsSiirtoVektori
...
tilaa
...
100
...
merkkiä:
Code Block |
---|
} if (OsSiirtovektori = _fmalloc(100 * sizeof(char)) == NULL) { printf("Allokointivirhe!!!"); exit(1); } {code} |