Probl cancellazione lista

di il
16 risposte

Probl cancellazione lista

Ciao a tutti, ho un problema nel cancellare l'unico elemento della lista.

visto che è l'unico elemento della lista non mi basta scrivere:

l=NULL;
free(l);
?

quando vado a stampare la lista dopo "l'eliminazione" come risultato ottengo:
? x y z
(dove x, y, z sono 3 campi della struct)

16 Risposte

  • Re: Probl cancellazione lista

    Prima imposti a null il puntatore e poi fai la free? Che senso la free di un NULL?

    Semmai

    free(l);
    l=NULL;
  • Re: Probl cancellazione lista

    L'ho scritto distrattamente qua nel forum, ma nel programma l'avevo scritto bene.
    il risultato della stampa è comunque quello che ho scritto
  • Re: Probl cancellazione lista

    Quale risultato? Non è chiaro ...
  • Re: Probl cancellazione lista

    Quando faccio la stampa della lista dopo "'l'eliminazione" ottengo

    ? x y z

    (dove x, y, z è il contenuto dei 3 campi), dovrebbe essere vuota

    capito?
  • Re: Probl cancellazione lista

    No ... perché dovrebbe essere vuota? Tu non modifichi il contenuto della lista ma solamente deallochi la memoria con la free.
  • Re: Probl cancellazione lista

    Pensavo bastasse scrivere l=NULL per considerarla vuota, allora come devo fare? grazie
  • Re: Probl cancellazione lista

    Scusa ... cerca di chiarire ...

    Il tuo problema è deallocare la memoria ? Quello che hai fatto basta ... non ci sono problemi.

    E poi, come fai la stampa della lista se il puntatore è NULL? Forse è sbagliato il codice di stampa della lista.
  • Re: Probl cancellazione lista

    Es problema:
    devo cercare una persona nella lista (per es cerco il cognome), una volta trovato elimino la persona.
    Il caso che mi interessa studiare è quando la lista è composta da una sola persona che ha il cognome che cerco, quindi eliminarla ottenendo la lista vuota.
    
    if ((strcmp(l->cognome,cogn) == 0) && (l->next == NULL)) { //la lista è composta solo da un elem
    			free(l);
    			l=NULL;
    		}
    
    La procedura stampa funziona, perché altrimenti mi restituirebbe "Lista vuota" perché l=NULL.
  • Re: Probl cancellazione lista

    Questa è la ricerca ma io ti chiedevo il codice della stampa ...
  • Re: Probl cancellazione lista

    
    void StampaLista(TipoLista l) {
       copia s;
       while (l != NULL) {   
          s=l->listcopie;
          printf("%s %s %s %d %d\n", l->tipo, l->descr, l->data, l->copie, l->copdisp);
          while (s != NULL) {
             printf("%d %d\n", s->col, s->rig);
             s=s->next;
          }
          l=l->next;
       }
       printf("\n");
    }
    
    comunque il problema non credo sia la funz di stampa
  • Re: Probl cancellazione lista

    Ok la stampa ... nella ricerca, dopo

    l=NULL;

    la funzione termina con un return oppure continua con altro codice?
  • Re: Probl cancellazione lista

    
    if ((strcmp(l->cognome,cogn) == 0) && (l->next == NULL)) { //la lista è composta solo da un elem
             free(l);
             l=NULL;
             return(0);
    }
    
  • Re: Probl cancellazione lista

    Ma il puntatoere l come lo passi alla funzione che fa la ricerca? E' il puntatore alla lista "globale" o è un argomento passato alla funzione?
  • Re: Probl cancellazione lista

    Ricerca(&l);

    Comunque controllo meglio la funzione magari ho fatto confusione con i puntatori
Devi accedere o registrarti per scrivere nel forum
16 risposte