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