Questo è il mio codice:
dati.c
#include "dati.h"
struct dato {
double valore;
unsigned classe;
};
extern struct dato *read_dati(const char *filename, unsigned int *pn) {
FILE *f;
f = fopen(filename, "r");
if (f == NULL) {
exit(1);
}
char a[100];
unsigned int y = 0;
struct dato *asd;
asd = malloc(0);
for (int i = 1; ; i++) {
if (feof(f)) {/*controlla fine file*/
break;
}
/*altrimenti continua*/
fgets(a, 7, f);
realloc(asd, sizeof(struct dato) * i);
asd[i-1].valore = atof(a);
fgets(a, 10, f);
asd[i-1].classe = atoi(a);
a[0] = '\0';
y++;
}
pn = &y;
fclose(f);
return asd;
}
Il mio problema è collocato nella righa:
"realloc(asd, sizeof(struct dato) * i);"
Non riesco a capire come mai non vada bene quello che ho scritto.
Il problema mi chiede di passare alla funzione il nome di un file da aprire in modalita lettura e salvare in (*pn)[altra variabile passata alla funzione] il numero di righe lette dal file.
Infine la funzione deve ritornare un puntatore ad una zona di memoria (allocata dinamicamente nell'heap) contenente tutti i dati letti nel file.
Ho deciso di utilizzare un realloc perche non so quante righe devo riportare nell'array struct dato asd, e quindi decido di allocare memoria ad ogni righa, fino a quando non arrivo a EOF
Potreste spiegarmi perchè mi mostra quell'errore? Grazie
ps. Appena provo a testare il programma mi mostra "Esame 2.4.exe has triggered a breakpoint."