In effetti quello che mi hai indicato era un errore che purtroppo non ha risolto il probblema...

Ho pensato ad una cosa...

colui che ha elaborato il programma di base usa la malloc:

tat = (TATREE*) malloc (sizeof(TATREE) +(i-1)*sizeof(int)+ n*sizeof (TATREE*))

io ho aggiunto il campo double weight.

Quando poi tale struttura viene riutilizzata, ad esempio per la visualizzazione, viene assegnato

vec = (TATREE**)(tat->items +tat->size);

Questa funziona nel caso iniziale, cioè senza introduzione del campo weight. Introducendo il campo weight, potrebbe causare uno slittamento? E quindi, non è che perde i valori, bensì non riesce ad allocare la variabile nella locazione corretta.
Potrebbe essere...????