Salve !
Il professore di linguaggio C ci ha chiesto di completare e correggere un esempio di lista di nodi. Riscontro un problema quando intendo rimuovere il nodo testa, verificandosi un problema di puntatori. Il codice è questo :
codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct nodolista
{
int KEY;
struct nodolista *next;
} nodolista;
nodolista* aggiungiintesta(int key, nodolista*);
void visualizzalista(nodolista*);
void rilascianodo(nodolista*);
int main()
{
nodolista *testa;
testa = calloc(1, sizeof(nodolista));
testa = aggiungiintesta(3, testa);
printf("\n");
visualizzalista(testa);
testa = aggiungiintesta(2, testa);
printf("\n");
visualizzalista(testa);
testa = aggiungiintesta(1, testa);
printf("\n");
visualizzalista(testa);
printf("\n");
rilascianodo(testa);
visualizzalista(testa);
system("PAUSE");
return 0;
}
nodolista* aggiungiintesta(int key, nodolista *testa)
{
nodolista *ptr;
ptr = calloc(1, sizeof(nodolista));
if(ptr == NULL)
{
printf("Memoria insufficiente !\n");
return NULL;
}
ptr -> next = testa; //ptr[val|pun ---> testa
testa = ptr;
ptr -> KEY = key;
return ptr;
}
void rilascianodo(nodolista* ptr)
{
nodolista *p;
p = calloc(1, sizeof(nodolista));
while(ptr)
{
p = ptr -> next;
free(ptr);
ptr = p;
}
}
void visualizzalista(nodolista* ptr)
{
while(ptr)
{
printf("[%d]", ptr -> KEY);
if(ptr -> next != NULL)
printf(" ---> ");
ptr = ptr -> next;
}
}
Potete cortesemente aiutarmi a fixare l' errore ?
Grazie in anticipo !