Quote:
Originariamente inviato da wingman87
Gli errori sono sostanzialmente due:
immagina la lista come una catena: quando cancelli un nodo è come se eliminassi un anello della catena, per far sì che la catena resti insieme devi legare tra loro l'anello che precedeva l'anello eliminato e il successivo. Quello che fai qui:
Codice:
struct lis *cancNum(struct lis *p){
struct lis *paus,*paus2;
while(((p->inf)%2==0)&&(p!=NULL))p=p->pun;
paus=p;
while(paus!=NULL){
if(((paus->inf)%2==0)){
paus2=paus->pun;
paus->pun=NULL;
paus=paus2;
continue;
}
paus=paus->pun;
}
return(p);
}
è cancellare un nodo, senza legare i due che gli stavano intorno.
Il secondo errore è che non deallochi la memoria allocata.
|
bhè, entrambe le cose che mi hai detto mi erano note : deallocare la memoria (penso tu intenda con free) lo volevo fare ma sl in un secondo momento, dato che era solo per ottimizzare il programma, e non mi interessa più di tanto visto che è ad uso didattico...per quanto riguarda le catene, è propio ciò che ho tentato di fare usando paus2...per non lasciare nessun nodo fluttante e per ricollegare il nodo precedente a quello distrutto...
mi potresti dire cosa ho sbagliato esattamente?