ciao a tutti volevo chiedervi aiuto con il seguente codice, tutte le volte che cerco di eliminare gli elementi della lista in coda ricevo un messaggio "core dumped" ma non riesco a capire dove sta il problema sbaglio a eliminare i coda?
C:
#include <stdio.h>
#include <malloc.h>
struct piano{
unsigned short int livello;
struct piano *ponte;
};
void stampa_inverso(struct piano *l);
int main() {
struct piano *scorri,*tail, *head;
unsigned short int n,d;
//creao l'ultimo della
printf("inserisci il numero di torri\n");
scanf("%hd", &n );
scorri=(struct piano*)malloc(sizeof(struct piano));
scorri->livello=1;
scorri->ponte=NULL;
tail=scorri;
head=scorri;//puntatore che rimane fermo al primo della lista
scorri=NULL;
for (int i=0; i< n-1; i++) {
scorri=(struct piano*)malloc(sizeof(struct piano));
scorri->livello=2+i;
scorri->ponte=NULL;
tail->ponte=scorri;
tail=scorri;
scorri=NULL;
}
//stampa in ordine
/*while ((*head).ponte!=NULL) {
printf("livello=%hd\n", (*head).livello);
head=head->ponte; //faccio avanzare scorri di 1 fino farlo a raggiungere al'ultima coda
}*/
//stampo al contrario
printf(" _______\n");
for (int i=0; i<n ;i++) {
scorri=head;
if (head==tail) {//la testa scritta com ultima
printf(" | | \n");
printf(" | %hd | \n",tail->livello);
printf(" |_____| \n");
} else {
while (scorri->ponte!=tail) {
scorri=scorri->ponte;
}
printf(" | | \n");
printf(" | %hd | \n",tail->livello);
printf(" |_____| \n");
tail=scorri;
}
}
printf("inserisci il numero di torri da eliminare\n");
scanf("%hd", &d);
for (int z = 0; z < d; z++) {//eliminazione in coda
if (head==tail) {
free(head);
}
while (scorri->ponte!=tail) {
scorri=scorri->ponte;
}
free(scorri->ponte);
scorri->ponte=NULL;
tail=scorri;
}
return 0;
}