Errore di segmentazione nella creazione di una lista da file

di Anonimizzato18613 il
3 risposte
Salve a tutti,
ho bisogno di creare un programma che sia in grado di creare una lista leggendo i dati da inserire da un file per poi stamparla. Procedendo iterativamente non ho riscontrato problemi, ma nella creazione della lista in modo ricorsivo il programma si compila e stampa effettivamente la lista correttamente, ma con l'aggiunta della frase "Errore di segmentazione" in fondo alla schermata del terminale.
Questo è il codice:
#include<stdio.h>
#include<stdlib.h>

struct element
{
	int x;
	int y;
};

struct info
{
	struct element data;
	struct info *next;
};	

typedef struct info node;
typedef node *list;

list new_node()
{
	return malloc(sizeof(node));
}

list recursive_list(FILE *fp)
{
	list head;
	int x, y;

	fscanf(fp,"%d %d", &x, &y);

	if(feof(fp) == 0)
	{
		head = new_node();
		head->data.x = x;
		head->data.y = y;
		head->next = recursive_list(fp);
	}
}

//Stampa della lista
list print_list(list l)
{
	while(l != NULL)
	{
		printf("%d %d\n", l->data.x, l->data.y);
		l = l->next;
	}
}

int main()
{
	list l1;
	FILE *fp;
	
	fp = fopen("input.txt", "r");
	
	if(fp == NULL)
	{
		printf("Errore: file non trovato.\n");
		exit(1);
	}
	else
		l1 = recursive_list(fp);

	print_list(l1);
}
Non riesco a capire il problema, qualcuno potrebbe aiutarmi?

3 Risposte

  • La funzione
    list recursive_list(FILE *fp)
    mi sembra che non ritorni niente; mi aspetterei un
    return head;
    da qualche parte...
    Dubito che tu poi ottenga dei valori corretti in fase di stampa.
  • In effetti era un errore stupido ^^" grazie!
  • Prego Comunque, se mi permetti il consiglio, io eviterei di leggere e gestire un file di testo in questo modo.
    Prima di tutto risulta difficile da leggere e in fondo la ricorsività in questo caso non ti da nessun beneficio; poi rendi difficile la gestione degli errori, senza contare che se ti viene passato un file particolarmente corposo rischi l'impiantamento.
Devi accedere o registrarti per scrivere nel forum
3 risposte