Ciao a tutti, sto lavorando in C su Ubuntu e sto continuando a riscontrare un errore di segmentazione.
Praticamente ho un file binario dal quale devo estrarre dei dati e inserirli in una tabella hash.
Composizione file:
n° elementi
id 1° elemento
dimensione (del contenuto)
contenuto
id 2° elemento
dimensione (del contenuto)
contenuto
id 3° elemento
dimensione (del contenuto)
contenuto
...
id N° elemento
dimensione (del contenuto)
contenuto
Dati:
long numelem; // numero di elementi
long *id_elem; //contiene l'id dell'elemento
typedef struct {
int dim; // dimensione del contenuto
char* buffer; // contenuto
} elemento_t
Parte del codice:
int i;
elemento_t *elem;
long *id_elem;
fread(&numelem, sizeof(long), 1, filereg); // legge il numero di elementi
for(i=0; i < numelem; i++) {
// allocazione memoria
elem=malloc(sizeof(elementi_t));
id_elem=malloc(sizeof(long));
fread(&id_elem, sizeof(long), 1, filereg); // leggo l'id elemento
fread(&elem->dim, sizeof(int), 1, filereg); // leggo la dimensione del contenuto
// alloco memoria per il contenuto
elem->buffer=malloc(elem->dim);
fread(&elem->buffer, elem->dim, 1, filereg); // leggo il contenuto
tab_hash_insert(tab_hash, id_elem, elem) == NULL) { // funzione di inserimento nella tab hash
printf("Errore inserimento\n");
free(elem->buffer); // libero memoria
free(id_elem);
free(elem);
exit(EXIT_FAILURE);
}
free(elem->buffer);
free(elem);
free(id_elem);
}
fclose(filereg); // chiusura file
}
La tabella è stata correttamente inizializzata e la funzione tab_hash_insert funziona dato che è stata testata in altre punti del programma.
tab_hash_insert(tab_t *tab_hash, void* id, void *elem)
Ho provato a stampare i dati di ogni elemento, togliendo la funzione di inserimento, e lo fa correttamente. Con la funzione ottengo sempre l'errore di segmentazione.
Spero che qualcuno, dando uno sguardo al codice possa darmi una mano.Vi ringrazio anticipatamente, buona serata