Salve ragazzi,sapete il perchè mi compare questo errore in questo programma ?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <malloc.h>
struct listNode{
char data;
struct listNode *nextPtr;
};
typedef struct listNode ListNode;
typedef ListNode *ListNodePtr;
//prototipi
void inserisci(ListNodePtr *sPtr, char valore);
char elimina(ListNodePtr *sPtr, char valore);
int vuota(ListNodePtr sPtr);
void stampaLista (ListNodePtr attualePtr);
void istruzioni (void);
int main(void)
{
ListNodePtr startPtr= NULL; // all'inizio non ci sono nodi
char carattere;//char inserito dall'utente
istruzioni();//stampa il menu
printf("%s","? ");
unsigned int scelta;//scelta dell'utente
scanf("%u",&scelta);
//ripeti il ciclo finchè l'utente non sceglie 3
while(scelta!=3){
switch(scelta){
case 1:
printf("%s","Inserisci un carattere:");
scanf("\n%c",&carattere);
inserisci(&startPtr,carattere);//inserisci l'elemento nella lista
stampaLista(startPtr);
break;
case 2://cancella un elemento
if(!vuota(startPtr)){
printf("%s","Inserisci carattere da eliminare: ");
scanf("\n%c",&carattere);
//se il carattere viene trovato, rimuovilo
if(elimina(&startPtr,carattere)){
printf("%c eliminato.\n",carattere);
stampaLista(startPtr);
}
else{
printf("%c non trovato.\n\n",carattere);
}
}
else{
puts("lista vuota.\n");
}
break;
default:
puts("scelta non valida.\n");
istruzioni();
break;
}
printf("%s","? ");
scanf("%u",&scelta);
}
puts("FINE");
}
//stampa le istruzioni all'utente
void istruzioni(void)
{
puts("Inserisci una scelta:\n"
" 1 per inserire un elemento nella lista\n"
" 2 per eliminare un elemento dalla lista\n"
" 3 per uscire.");
}
void inserisci(ListNodePtr *sPtr, char valore)
{
ListNodePtr newPtr= malloc(sizeof(ListNode));
if(newPtr!=NULL){//Se c'è spazio disponibile
newPtr-> data=valore;//inserisci valore nel nodo
newPtr->nextPtr = NULL;//il nodo non è collegato ad altri nodi
ListNodePtr primaPtr=NULL;
ListNodePtr attualePtr= *sPtr;
//ripeti il ciclo per trovare la posizione corretta nella lista
while(attualePtr!=NULL && valore > attualePtr->data){
primaPtr=attualePtr;//va avanti....
attualePtr=attualePtr->nextPtr;//..al nodo successivo
}
//inserisci il nuovo nodo all'inizio della lista
if(primaPtr== NULL){
newPtr->nextPtr= *sPtr;
*sPtr =newPtr;
}
else {
primaPtr->nextPtr=newPtr;
newPtr->nextPtr=attualePtr;
}
}
else{
printf("%c non inserito.Memoria non disponibile.\n",valore);
}
}
char elimina(ListNodePtr *sPtr, char valore)
{
if(valore==(*sPtr)->data){
ListNodePtr tempPtr= *sPtr;//aggancia il nodo da rimuovere
*sPtr=(*sPtr)->nextPtr;//sfila il nodo
free(tempPtr);//libera il nodo
return valore;
}
else{
ListNodePtr primaPtr = *sPtr;
ListNodePtr attualePtr = (*sPtr)->nextPtr;
while(attualePtr!=NULL && attualePtr->data!=valore){
primaPtr=attualePtr;//va avanti...
attualePtr=attualePtr->nextPtr;//...al nodo successivo
}
//cancella il nodo a cui punta currentPtr
if(attualePtr !=NULL){
ListNodePtr tempPtr = attualePtr;
primaPtr->nextPtr=attualePtr->nextPtr;
return valore;
}
}
return '\0';
}
//restituisci 1 se la lista è vuota,altrimenti 0
void stampaLista (ListNodePtr attualePtr)
{
//se la lista è vuota
if(vuota(attualePtr)){
puts("lista vuota.\n");
}
else{
puts("La lista e':");
//finchè non si raggiunge la fine della lista
while(attualePtr !=NULL){
printf("%c-->",attualePtr->data);
attualePtr = attualePtr->nextPtr;
}
puts("NULL\n");
}
}