Ciao , intanto userei la funzione malloc() , e comunque la calloc() non si usa in quel modocodice:typedef struct oggetto { double volume,peso; unsigned char colore[3]; } OGGETTO; OGGETTO *elenco(char *fname, int*dim) { FILE *fp; OGGETTO *vect; int i; if ((fp = fopen(“fname”, “r”)) != NULL ) { fscanf (fp, “%d\n”, dim); vect = (OGGETTO*)calloc ((*dim)*sizeof(OGGETTO)); for (i=o; i<*dim; i++) { vect[i].colore = (char*)calloc ((*dim)*sizeof(char)); } for (i=0; i<*dim; i++) { fscanf (fp, %d %lf %lf, vect[i].colore, &vect[i].volume, &vect[i].peso); } } else { perror (fname); return NULL; } fclose (fp) } return vect; }
calloc(numero_elementi , dimensione_byte) .
unsigned char colore[3]; è un array di tre elementi , non un puntatore , quindi non
devi allocare memoria !
colore è un array di char nella fscanf() non userai %d ma %s
questa parte
for (i=o; i<*dim; i++) {
vect[i].colore = (char*)calloc ((*dim)*sizeof(char));
}
La puoi eliminare .

Rispondi quotando