ciao a tutti! ho un grosso problema che non riesco a risolvere![]()
Durante l'esecuzione, mi viene dato il solito errore delle free():
*** glibc detected *** ... : free(): invalid pointer: 0x0804d500 ***
potreste aiutarmi a risolvere questo problema? Perché proprio non capisco... Ho fatto questo procedimento:
ho dichiarato dei puntatori che verranno passati ad un puntatore struttura in questo modo:
poi ho allocato i puntatori (facenti parte della struttura) in questo modo:codice:nome = malloc(20 * sizeof(char *)); cognome = malloc (20 * sizeof(char *)); list = malloc (100 * sizeof(char **)); for(i=0;i<=100;i++) list[i] = malloc (20 * sizeof(char *));
e alla fine della funzione che dealloca le singole parti della struttura ho scritto questo:codice:struct nomi *construct_struct(int numero, char *nome, char *cognome, char **list) { int i; struct nomi *this = malloc(sizeof(struct nomi)); this->numero = numero; this->nome = malloc((strlen(nome) + 1) * sizeof(char *)); strcpy(this->nome, nome); this->cognome = malloc((strlen(cognome) + 1) * sizeof(char *)); strcpy(this->cognome, cognome); this->list = malloc ((strlen((char *)list)+1) * sizeof (char)); for(i=0;i<=100;i++) this->list[i] = malloc ((strlen(list[i])+1) * sizeof (char *)); strcpy((char *)this->list,(char *) list); for(i=0;i<=100;i++) strcpy(this->list[i], list[i]); return this; }
l'errore mi viene dato alla deallocazione del puntatore doppio chiamato "list"...codice:void destruct_struct(struct nomi *elenco) { int i; free(elenco->nome); free(elenco->cognome); for(i=0;i<=100;i++) free(elenco->list[i]); free(elenco->list); free(elenco); }
Qualcuno sa spiegarmi perché?![]()
Grazie infinite per l'aiuto![]()

Rispondi quotando
