Buongiorno, sto facendo il seguente codice in C (ho impostato anche il compilatore, Visual Studio 2010, per compilare in C). Ma quando arriva alla fine mi da questo errore:
codice:
Windows ha generato un punto di interruzione in Gestione Classe.exe.
Ciò può essere dovuto a un danneggiamento dell'heap che indica un bug in Gestione Classe.exe o in una qualunque delle DLL che ha caricato.
È anche possibile che l'utente abbia premuto F12 mentre Gestione Classe.exe era attivo.
Controllare la finestra di output per ulteriori informazioni diagnostiche.
Il codice è il seguente, ed ha la funzione di leggere un numero dinamico di classi ed allocarne per ognuno un numero dinamico di studenti. Lo avevo appena iniziato, adesso ha solo come compito notare che non esiste alcun file "matrice.dat" e far creare la prima classe. Ho utilizzato una matrice perchè appena capisco perchè mi da l'errore implementerò una lettura da file che leggerà tutte le classi e le disporrà sulla matrice.
codice:
#include <stdio.h>
#include <stdlib.h>
struct studente {
char nome[20],cognome[20];
int voto;
};
void allocaClasse(int,struct studente ***,int);
void trasformaMaiuscola(int,struct studente***,int);
void stampaClasse(int, struct studente ***,int);
void liberaMemoria(int, struct studente***, int);
void main(){
struct studente **classi;
FILE *fp;
int nClassi,nStudenti,classeAttuale,i,j;
fp=fopen("Classi.dat","rb+");
if(fp==NULL){
printf("Nessuna classe trovata, si procede alla creazione di una nuova.\nQuanti studenti ne fanno parte? ");
scanf("%d",&nStudenti);
nClassi=1;
classeAttuale=0;
allocaClasse(nStudenti,&classi,nClassi);
trasformaMaiuscola(nStudenti,&classi,nClassi);
stampaClasse(nStudenti,&classi,classeAttuale);
for(i=0;i<nClassi;i++) free(classi[i]);
free(classi);
}
scanf("\n");
}
void allocaClasse(int A, struct studente ***B,int C){
int i,j;
(*B)=malloc(C*sizeof(struct studente*));
for (i=0;i<C;i++) (*B)[i]=malloc(A*sizeof(struct studente*));
for (i=0;i<C;i++) {
for(j=0;j<A;j++){
printf("Inserire il cognome dello studente %d: ",j);
scanf("%s",&(*B)[i][j].cognome);
printf("Inserire il nome dello studente %d: ",j);
scanf("%s",&(*B)[i][j].nome);
printf("Inserire il voto dello studente %d: ",j);
scanf("%d",&(*B)[i][j].voto);
}
}
}
Ho omesso le funzioni stampa/trasforma maiuscola perchè non credo creino problemi, quindi era inutile appesantire qui il codice. Se servono le metto.
Grazie