Liste concatenate

di il
6 risposte

Liste concatenate

Buongiorno a tutti.
Sto svolgendo un esercizio sulle liste concatenate e quando eseguo la funzione
 void destroy (element *h)
che dovrebbe cancellarmi tutti gli elementi della lista mi dà segmentation fault. Perchè?
void destroy (element *h) {
   element *p, *c;
   for (p=NULL, c=h; c!=NULL; p=c, c=c->next) {
      p->next = c->next;
      free (c);
   }
La struttura dati che gli passo è questa:
struct element {
   int info;
   struct element *next;
};
typedef struct element element;
Qualcuno ne capisce? Ringrazio in anticipo.

6 Risposte

  • Re: Liste concatenate

    
    void destroy (element *h) {
       element *p, *c;
       for (p=NULL, c=h; c!=NULL; ) {
          p = c;
          c = c->next;
          free (p);
       }
    
  • Re: Liste concatenate

    Mi dà lo stesso segmentation fault....ma che cambia rispetto a quello che avevo scritto io?
  • Re: Liste concatenate

    Fai i disegnini delle celle e lo capisci. dopo free (c); nel tuo codice non si può + fare c->next perche c = NULL. nel mio tu fai:
    
    p = c;
    c = c->next;
    free (p);
    
    liberi la memoria dopo che c e stato spostato al prossimo elemento. Il segmentation fault è dovuto a qualcos altro. La tua lista concatenata non è poi così concatenata.
  • Re: Liste concatenate

    Esempio che quello che dico è vero.
    
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct _nodo
    {
    	_nodo *next;
    }nodo;
    
    
    int main()
    {
      
    	nodo *h = NULL;
    	int i = 0;
    	while(i < 5)
    	{
    		nodo *ptr = (nodo *)malloc(sizeof(nodo));
    		ptr->next = h;
    		h = ptr;
    		i++;
    	}
    	
    	nodo *p,*c;
    	for (p=NULL, c=h; c!=NULL; )
    	{
          p = c;
          c = c->next;
          free (p);
       }
    return 0;
    }
    
    prima della cancellazione.
    prova.jpg
    prova.jpg

  • Re: Liste concatenate

    Grazie tante funge So che la domanda non è tanto pertinente...ma che editor usi per il c?
  • Re: Liste concatenate

    Visual Studio.
Devi accedere o registrarti per scrivere nel forum
6 risposte