Perchè?
Questo è un "pezzo" di programma che fa parte di un programma più grande.
Con il compilatore Dev-C++ ho notato che se inserisco come genere un numero maggiore o eguale a otto il programma si blocca.
Sapreste dirmi il perchè di questa anomalia?
Con il compilatore Dev-C++ ho notato che se inserisco come genere un numero maggiore o eguale a otto il programma si blocca.
Sapreste dirmi il perchè di questa anomalia?
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char titolo[50],autore[40];
int collocazione,copie,genere;
}libro;
void leggi(libro *x);
void inserimento(libro *lb[5],int *N);//Passando l'intera tabella chiederemo nella funzione il libro da inserire attraverso la leggi
void visualizza(libro *R,int n);//Passando la riga,chiederemo nel main il genere(che altro non è che la riga!)
void menu();
main(){
libro *lb[5];
int N[5],scelta,genere;
for(genere=0;genere<5;genere++){
lb[genere]=NULL;
N[genere]=0;
}
do{
menu();
scanf("%d",&scelta);
switch(scelta){
case 1:inserimento(lb,N);
break;
case 2:printf("Genere: ");
scanf("%d",&genere);
visualizza(lb[genere],N[genere]);
break;
case 0:printf("\n Fine!\n");
break;
default:printf("\n Tasto non valido!\n");
break;
}
}while(scelta!=0);
for(genere=0;genere<5;genere++)
free(lb[genere]);
system("PAUSE");
return 0;
}
void inserimento(libro *lb[5],int *N)
{
libro l,*aux;
leggi(&l);
aux=realloc(lb[l.genere],sizeof(libro)*(N[l.genere]+1));
if(aux==NULL) return;
lb[l.genere]=aux;
lb[l.genere][N[l.genere]]=l;
N[l.genere]++;
}
void visualizza(libro *R,int n)
{ int i;
for(i=0;i<n;i++){
printf("Titolo: %s\n",R[i].titolo);
printf("Autore: %s\n",R[i].autore);
printf("Collocazione: %d\n",R[i].collocazione);
printf("Copie: %d\n",R[i].genere);
}
}
void leggi(libro *x)
{
printf("Titolo:\n");
scanf("%s",(*x).titolo);
printf("Autore:\n");
scanf("%s",(*x).autore);
printf("Collocazione:\n");
scanf("%d",&(*x).collocazione);
printf("Copie\n");
scanf("%d",&(*x).copie);
printf("Genere:\n");
scanf("%d",&(*x).genere);
}
void menu()
{
printf("\n MENU PRINCIPALE\n\n");
printf("Premi: 1 per inserire un nuovo libro, 2 per visualizzare la tabella, 0 per terminare\n\n\n");
}
Risposte
Ma genere non deve essere maggiore di 4... lb[genere] e N[genere] non esistono se genere è maggiore di 4...
Mi stupisco che funzioni per $4<$genere$<=8$
Mi stupisco che funzioni per $4<$genere$<=8$
"vict85":
Ma genere non deve essere maggiore di 4... lb[genere] e N[genere] non esistono se genere è maggiore di 4...
Mi stupisco che funzioni per $4<$genere$<=8$
Che sbadato!
Hai ragione!!!
grazie