Perchè?

Sk_Anonymous
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?
#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
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$

Sk_Anonymous
"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

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.