Traccia esame "linked list "

di il
1 risposte

Traccia esame "linked list "

La traccia : data L una lista di interi si realizzi in c :
una funzione che inizializza L con 10 numeri casuali(prima richiesta)
questo e il codice , ma mi ritrovo con qualche segmentation fault nel debugging
menu

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct tag_lista {
	int info;
	struct tag_lista *next;
}lista;

void inserimento(lista **head);
void *new_nodo(lista **head_ref ,int i);

int main()
{
	lista *listptr = NULL;
    inserimento(&listptr);

    return 0;
}
funzioni

void inserimento(lista **head)
{   int i;
    lista *curr;
    curr=*head;
    srand(time(NULL));
    for( i=0 ; i<10; i++){

         new_nodo(&curr,rand()%100+1);
         printf("%d\n",(curr)->info);
         curr=(curr)->next;

     }
    printf("\n%d",(*head)->info);
}

void *new_nodo(lista **head_ref ,int i){
lista *node=(lista*)malloc(sizeof(lista));
node->info=i;
node->next=NULL;
(*head_ref)=node;
    printf("\n%d",(*head_ref)->info);
}

1 Risposte

  • Re: Traccia esame "linked list "

    Ciao, al di là del fatto che la funzione new_nodo dovrebbe restituire un puntatore (non usato, fra l'altro) e non restituisce nulla, il problema principale è che tu dichiari all'inizio curr = *head (ovvero NULL), ma poi all'interno della funzione new_nodo cambi il valore di *head, senza poi aggiornare curr.
    Questa piccola dimenticanza fa saltare tutto quando fai curr->info, all'interno del ciclo for..

    Comunque a mio avviso la logica a puntatori doppi crea più confusione che vantaggi. Io avrei creato le funzioni:
    list* new_node(int value)
    list* append(list* head, list* node) [o, in alternativa, list* append(list* head, int value)]. Questa funzione dovrebbe restituire il puntatore alla testa della lista, cosa utile quando si cerca di aggiungere un elemento ad una lista vuota.
Devi accedere o registrarti per scrivere nel forum
1 risposte