Citat:
Trece nema potrebe da proverava dal je pointer != 0 jer delete null pointera
je garantovano no op.
Pozdrav!
Jesi siguran ? Evo kako to izgleda tj. testirano na VC++ 8.0 compileru u debug modu
Code:
delete niz[tek]; // kad se uradi delete pointer ostaje njegova adresa ali heap na koji pokazuje je neispravan tj. oxfeeefeee
niz[tek] = 0; resetujes pointer
delete niz[tek]; // ovde vec ne puca ..
i
Code:
delete niz[tek];
// u sledecem prolazu kroz niz
delete niz[tek]; //ovde puca
Tako da kad se pozove :
Code:
if (niz[tek] != 0) {
delete niz[tek] ;
niz[tek] = 0 ;
}
Moze biti siguran da je pointer ispravan za brisanje i ne mora da radi bespotrebno delete na 0p.
Citat:
Ma na osnovu koda koji si postovao i ostali, vec sam mu rekao sta je problem.
Ne resetuje n na 0 pa ne moze da pozove brisi dvaput. Sve ostalo je ok.
Da to sam i ja prvo primetio da izmedju ostalog i variajbla N koja se ne postavlja na 0
ali sto bi ponovo pozivao istu funkciju vise puta
Code:
void brisi ()
{
for(int i=0;i<n;i++)
{
delete niz[i];
}
delete [] niz;
n=0; ovde je izostavio
}
pa i da resetuje N na nulu kad moze da je kontrolise kroz destruktore klasa
jednom i samo jednom ili na ovaj nacin :
Code:
~Skladiste()
{
cout << "Brisanje skladista" << "r\n" ;
if (n > 0)
brisi();
}
E sad na njemu je da je po potrebi pozove u odgovarajucoj klasi...
Pozdrav!
Viva lollapalooza