Ciao! Ho un problemino con questo programma, praticamente dovrebbe creare una lista dinamica ed eliminare poi tutti i valori inferiori ad un certo numero che specifico dalla lista. Solo che va in crash quando raggiunge l'ultimo numero della lista
Come mai? 
codice:
#include <stdio.h>
#include <stdlib.h>
void crealista();
void visualizzalista();
int eliminanumero(int dato);
struct elenco {
int numero;
struct elenco *pun;
};
int i,n;
struct elenco *p,*paux, *paux2;
main()
{
int val,i;
crealista();
printf("Quale e' il numero al di sotto del quale vuoi eliminare i numeri piu piccoli?: ");
scanf("%i",&val);
while (i != 0)
{
i = eliminanumero(val);
}
visualizzalista();
}
void crealista()
{
printf("Inserisci la quantita' dei numeri da inserire: ");
scanf("%i",&n);
if (n==0)
p = NULL;
else
{
p = (struct elenco *)malloc(sizeof(struct elenco));
printf("\nInserisci il valore: ");
scanf("%i",&p->numero);
paux = p;
for (i=1;i<=n-1;i++)
{
paux->pun = (struct elenco *)malloc(sizeof(struct elenco));
paux = paux->pun;
printf("\nInserisci il valore: ");
scanf("%i",&paux->numero);
if (i==n-1)
paux->pun = NULL;
}
}
}
int eliminanumero(int dato)
{
paux = p;
while (paux != NULL)
{
if (paux == p && paux->numero < dato)
{
p = paux->pun;
free(paux);
return 1;
}
else if (paux->pun->numero < dato)
{
paux->pun = paux->pun->pun;
paux2 = paux->pun;
free(paux2);
return 1;
}
paux = paux->pun;
}
return 0;
}
void visualizzalista()
{
system("cls");
paux = p;
while (paux != NULL)
{
printf("%i\n",paux->numero);
paux = paux->pun;
}
}
grazie mille