Segmentation fault su lista!

di il
1 risposte

Segmentation fault su lista!

Buongiorno a tutti, sono un novizio della programmazione in C e mi stavo cimentando in un esercizietto sulle liste. Ovvero mi si richiede di scriere il codice di un programma che prenda in imput una serie di dati, ci costruisca una lista, e po da questa lista ne costruisca un'altra che abbia solamente gli elementi che si trovano dopo una posizione n. Purtroppo, dopo aver scritto e provato a compilare il programa, ricevo un errore di segmentazione che non riesco a corregger. RIporto qui di seguito il codice:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct node {
int data;
struct node*next;
} node;

node*newnode() {
return(node*)malloc(sizeof(node));
}


node *buildlis()
{
int x;
node *lis, *p, *last;
printf("nuovo numero da inserire in lista:\n");
scanf("%d", &x);
if (x<=0)
lis= NULL; /* caso di lista vuota */
else
{
/* inserzione del primo elemento in una lista */
last=newnode();
lis = last;
last->data = x;
last->next = NULL;
printf("nuovo numero da inserire in lista:\n");
scanf("%d", &x);
while (x>0)
/* Invariante: lis punta alla lista con tutti gli interi finora letti, tranne l'ultimo, e last punta all'ultimo nodo di tale lista */
{
p=newnode();
p->data = x;
p->next = NULL;
last->next = p;
last = p;
printf("nuovo numero da inserire in lista:\n");
scanf("%d", &x);
}
}
return(lis);
}

void printlis(node *lista) {
while(lista!=NULL) {
printf("%d ",lista->data);
lista=lista->next;
}
}


node *funzione (node*l1, int n) {
node *p, *head, *tail;
int pos=1;
while ((l1!=NULL) && (pos>n)) {
p=newnode();
p->next=NULL;
p->data=l1->data;
if (head==NULL) {
head=p;
tail=p;
}
else {
tail->next=p;
tail=p;
}
l1=l1->next;
pos++;
}
while ((l1!=NULL) && (pos>n)) {
p=newnode();
p->next=NULL;
p->data=l1->data;
if (head==NULL) {
head=p;
tail=p;
}
else {
tail->next=p;
tail=p;
}
l1=l1->next;
pos++;
}

return head;
}





main () {
int n=4;
node *lista1;
node *lista2;
lista1=buildlis();
printf("\n");
printf("Ecco gli elementi inseriti nella prima lista:\n");
printlis(lista1);
printf("\n");
lista2=funzione(lista1,n);
printf("Ecco la lista nuova:\n");
printlis(lista2);
}


Sarei davvero grato se qualcuno potesse troarmi l'errore e magari spiegarmi dove sbaglio. Grazie per lattenzione!

1 Risposte

  • Re: Segmentation fault su lista!

    node *funzione (node* l1, int n)
    {
        node *p=NULL, *head=NULL, *tail=NULL;     /**< devi inizializzare i puntatori ERRORE GRAVE */
        int pos=1;
    
        if(l1==NULL)                /**< se le lista e' vuota, esce subito */
            return NULL;
    
        for(l1=l1;pos<n;pos++){     /**< avanza fino al primo elemento desiderato, esce se non ci sono abbastanza elementi */
            if(l1->next==NULL)
                return NULL;
    
            l1=l1->next;
        }
    
        while ((l1!=NULL))                  /**< copia un elemento alla volta finche' le lista non termina */
        {
            p=newnode();
            p->next=NULL;
            p->data=l1->data;
    
    
            if (head==NULL)         /**< nel tuo codice non si verificava mai */
            {
                head=p;
                tail=p;
            }
            else
            {
                tail->next=p;
                tail=p;
            }
            l1=l1->next;
        }
    
        return head;
    }
Devi accedere o registrarti per scrivere nel forum
1 risposte