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:
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 *));
poi ho allocato i puntatori (facenti parte della struttura) in questo modo:
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;
}
e alla fine della funzione che dealloca le singole parti della struttura ho scritto questo:
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);
}
l'errore mi viene dato alla deallocazione del puntatore doppio chiamato "list"...
Qualcuno sa spiegarmi perché?
Grazie infinite per l'aiuto