Esercizio C e problema con SCL

Devja

Utente Attivo
11 Gen 2013
37
0
6
Scusate ho un problema con un esercizio. il testo recita:
Implementare la funzione C:

int delete_occurrences(TipoSCL* scl, int info);
che dato un puntatore ad una lista collegat scl, e un intero info, elimini tutte le occorrenze di elementi nella lista scl che hanno il campo informazione uguale ad info. Inoltre come valore di ritorno deve restituire un intero contenente il numero di elementi eliminati dalla lista collegata scl.

Esempio

Dato la seguente lista:

scl = [2 -> 5 -> 3 -> 2 -> 8 -> 2 -> 2 -> 9 -> 4 -> 2]

e richiamando la seguente linea di codice:

delete_occurrences(scl, 2);

scl dovrà contenere:

scl = [5 -> 3 -> 8 -> 9 -> 4]

e la funzione dovrà restituire un intero di valore 5.

io ho scritto questo codice

Codice:
#include <stdlib.h>

#include "esercizio1.h"

int delete_occurrences(TipoSCL * scl, int info)
{
    //definisco una variabili p con attributo info =info
    //TipoSCL p= (NodoSCL*)malloc (sizeof(NodoSCL));
    
    //TipoSCL temp=(NodoSCL*)malloc (sizeof(NodoSCL));
    
    int elm=0;//numeri eliminati
  
    //controllo se p=scl->info
    TipoSCL p = *scl;
    if (scl == NULL)
    {
        elm=0;
    }
    else
    {
        if (p==scl)
        {
            if((*scl)->info==info)
            {
                *scl = (*scl)->next;
                free(p);
                elm+=1;
            }
            //        else
            //        {
            //            if((*scl)->next==NULL)
            //            {
            //                free(p);
            //                elm+=1;
            //            }
            //        }
            
        }
        else
        {
            p=(*scl)->next;
            while (scl)
            {
                
                //            if((*p)->info==info)
                
                if(p->info==info)
                {
                    *scl = p->next;
                    free(p);
                    elm+=1;
                }
                scl= (*scl)->next;
                p=(*scl)->next;
            }
        }
    }
    
    return elm;
}
quando vado a compilare ed eseguire il main del preggetto che allego mi da segmentation fault. non riesco a capire il perché. Vi allego il link per scaricare il file di main e il makefile
https://www.dropbox.com/s/salt4ynd2lqx2hs/esercizio1.zip?dl=0