Ovo je primer iz zbirke zadataka "C\C++" od Milana Cabarkape glava 15 zad "3 h - drugo resenje".
Dakle donja f-ja brise one clanove liste koji sadrze karakter koji cuva promenjiva E.
Interesuje me zasto (u liniji oznacenoj sa mnogo "??????" ) svaki put kada se nadje "informacija E"
on ponovo definise pokazivac q. delete q bi trebalo samo da oslobodi memoriju na koju pokazuje a ne i pokazivaca q.
Ja bih recimo pokazivac q definisao odmah u drugom redu f-je (POKC pred=NULL,t=L,q) a "dole" samo q=t.
ima li neko odgovor?
Code:
typedef struct cvor
{
char inf;
struct cvor *sledeci;
} CVOR;
typedef CVOR* POKC;
...
void brisi_iter (char E, POKC &L)
{
POKC pred=NULL,t=L;
while (t)
if (t->inf==E)
{
POKC q=t; // ?????????????????????????
if (pred)
pred->sledeci=t->sledeci;
else
L=t->sledeci;
t->sledeci;
delete q; // fusnote
}
else { pred=t;t=t->sledeci;}
}
typedef struct cvor
{
char inf;
struct cvor *sledeci;
} CVOR;
typedef CVOR* POKC;
...
void brisi_iter (char E, POKC &L)
{
POKC pred=NULL,t=L;
while (t)
if (t->inf==E)
{
POKC q=t; // ?????????????????????????
if (pred)
pred->sledeci=t->sledeci;
else
L=t->sledeci;
t->sledeci;
delete q; // fusnote
}
else { pred=t;t=t->sledeci;}
}
a druga stvar moglo bi i sa f-jom free umesto delete. pr:
(red: fusnote)
jel' to Cabarkapa nedosleda pa malo C malo C++ (malo 'leba , malo perece :) )?
Code:
void brisi_iter (char E, POKC &L)
{
POKC pred=NULL,t=L;
while (t)
if (t->inf==E)
{
POKC q=t; // ?????????????????????????
if (pred)
pred->sledeci=t->sledeci;
else
L=t->sledeci;
t->sledeci;
free( q ); // fusnote
}
else { pred=t;t=t->sledeci;}
}
void brisi_iter (char E, POKC &L)
{
POKC pred=NULL,t=L;
while (t)
if (t->inf==E)
{
POKC q=t; // ?????????????????????????
if (pred)
pred->sledeci=t->sledeci;
else
L=t->sledeci;
t->sledeci;
free( q ); // fusnote
}
else { pred=t;t=t->sledeci;}
}