Errore di segmentazione e implementazione lista

di il
1 risposte

Errore di segmentazione e implementazione lista

Salve ragazzi,sto provando a realizzare un'implementazione di una lista.

Per il momento ho creato soltanto alcuni operatori che sono:

new_list: crea una nuova lista vuota
add_element: Aggiunge un elemento in coda,alla fine della lista
output_list: stampa i valori della lista
empty:_list: verifica se la lista è vuota

Il tipo item è un intero, e nell'header file definisco il nodo e il puntatore al nodo,cioè la lista.

Ora il problema è che quando utilizzo l'operatore output_list non viene stampato il valore inserito nella lista
per prova,ma viene segnalato un errore di segmentazione. Con l'operatore empty_list ho notato che
la lista è vuota,quindi il problema deve essere nella funzione di inserimento, add_element.

list add_element(item val,list l)
{

list temp;

temp = malloc(sizeof(list));
if(temp == NULL)
	{
	printf("\nImpossibile aggiungere un nuovo elemento!\n");
	} 
else
	{
	temp->value = val;
	temp->next = l;
	l = temp;

	}

return l; }

Allego il resto del codice per maggiore chiarezza


//LIST.H
typedef int item;

struct nodoList{
	item value;
	struct nodoList *next;
};


typedef struct nodoList *list;



//OPERATORI
	
list new_list();
list  add_element(item val,list l);
void output_list(list l);
int empty_list(list l);

//LIST.C
#include <stdlib.h>
#include <stdio.h>

#include "list.h" 


// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

list new_list()
{
return NULL;
}

// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
list add_element(item val,list l)
{

list temp;

temp = malloc(sizeof(list));
if(temp == NULL)
	{
	printf("\nImpossibile aggiungere un nuovo elemento!\n");
	} 
else
	{
	temp->value = val;
	temp->next = l;
	l = temp;

	}

return l; 

}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

void output_list(list l)
{

list temp;

temp = l;
	while(temp->next != NULL)
		{
		printf("\n%d",temp->value);
		temp= temp->next;
		}


}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


int empty_list(list l)
{
	return l == NULL;
}


//MAIN.C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "list.h"

int main(){


list my_list;

my_list = new_list();

my_list = (3,my_list);

if(empty_list(my_list))
	printf("\nLa lista e' vuota\n");
else
	printf("\nLa lista non e' vuota\n");

return 0;
}

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte