codice:
typedef struct { /* --- a transaction --- */ 
double weight_tran; /*peso della transazione*/ 
int cnt; /* number of items */ 
int items[1]; /* item identifier vector */ 
} TRACT; 

typedef struct { /* --- a transaction set --- */ 
ITEMSET *itemset; /* underlying item set */ 
int max; /* maximum number of items per t.a. */ 
int vsz; /* size of transaction vector */ 
int cnt; /* number of transactions */ 
int total; /* total number of items */ 
TRACT **tracts; /* transaction vector */ 
} TASET; 



void main() 
{ 
	TRACT *ta; 


	taset = (TASET*) malloc (sizeof(TASET)); 
	taset->tracts = (TRACT**)malloc(sizeof(TRACT)); //-->questo non può essere!

	ta = (TRACT*)malloc(sizeof(TRACT) +(1) *sizeof(int)); //->quì il +1 viene ignorato
	ta->cnt=2; 

	ta->items[0]=0; 
	ta->items[1]=1; 
	ta->weight_tran=4.5; 

	//ogni volta che assegno un valore a ta->weight_tran vengono
	//modificati alcuni dei valori di tat->items 
	//(quelli di posizione 1 e 2: sempre gli stessi)

	taset->tracts[0]=ta; 

}
Credo di aver trovato l'errore,anzi gli errori,te li ho indicati nel codice.
innanzitutto quest'istruzione va scritta così:

codice:
taset->tracts = (TRACT**)malloc(sizeof(TRACT*));
Cioè con la sizeof devi indicare la dimensione di un puntatore
a struttura di tipo TRACT non la dimensione di un'intera struttura.

Inoltre qauesta va scritta così:
codice:
ta = (TRACT*)malloc((sizeof(TRACT) + 1) *sizeof(int));
altrimenti la precedenza dell'operatore * sull'operatore +
annulla quel + 1 che hai messo.Spero sia quello il problema.
Comunque la strada per ottenere un aiuto nel caso non sia quello e proprio
di isolare il problema e postare del codice,(possibilmente già funzionante
nel senso che si compila) in cui succede la cosa anomala,infatti il codice che hai postato ora non era compilabile,mancavano le definizioni delle strutture e la dichiarazione di TASET oltre a quella di ITEMSET.fammi sapere ciao