next up previous
Next: new in delete Up: DEBUG Previous: Sklad,brez`` max_Sklad

malloc in free

To sta takoimenovana c-jevska ukaza. Ko narediš en objekt, se ta objekt naseli v pomnilnik. Nekje v pomnilniku se nahaja naš sklad. Moti nas številka max_sklad, ki je v naprej določena. Včasih želimo, da je ta majhna, včasih pa velika.

Definirali bomo, da skladišče ne bo več skladišče, ampak kazalec na skladišče.

   int * ptrSkladisce;
Zvezdica ,,*`` v glavi funkcije pomeni referenco na objekt; tu pa to pomeni, da je kazalec na objekt tipa int.

Ko v stari izvedbi ustvarimo sklad, se nam prostor za skladišče sam od sebe rezervira. Funkcija, ki jo bomo napisali, nam bo to naredila po naših potrebah: n - zlogov pomnilnika.

Sklad::Sklad() {
  ptr_Skladisce= (int*)malloc (max_Sklad * sizeof(int));
} //Sklad
Sklad::~Sklad() {
 free(ptr_skladisce);   // s tem smo vrnili, kar smo dobili
} //~Sklad
Pri malloc je int osnovni tip spremenljivke, ki bo ustvarjen. Velikost tega tipa je sizeof(int) zlogov - ena spremenljivka zasede toliko zlogov pomnilnika. V našem primeru jih bomo dobili max_Sklad krat toliko.

Kako s tem delati? Napisali bomo novo funkcijo z našim novim skladiščem.

void Sklad::Nalozi(int element) {
  ptr_skladisce[zadnji]= element;
  zadnji ++;
 } //Nalozi

Podrobno si lahko pogledate na:

displaymath129

V c-ju in c++ so polja čudna stvar - ne obstajajo. Polje je predstavljeno kot kazalec na prvi element polja. Če hočeš priti do zadnjega, prišteješ temu kazalcu velikost polja. Da bo pravilno delal, mora biti spremenljivka kazalec na prvi element polja.



Andrej Brodnik (Andy)
Tue Mar 31 12:55:17 MET DST 1998