Chiedo venia!!!

In effetti ero convinta di aver postato tutto il programmino...

tra le cose: il primo errore era solo una dimenticanza di copiatura, mentre il secondo invece si vuole "lasciare lo spazio" di, in questo caso, 2 interi (nel programma principale questo 1 è il risultato di una formula, quindi una volta sarà ad 1*sizeof(int) una'altra 2*sizeof(int) etc...)

Qui c'è l'intero programmino che compie lo stesso errore del programma originale.

#include <stdio.h>
#include <stdlib.h>

typedef struct {
int cnt;
int items[1];
double weight_tran;
} TRACT;


typedef struct {
int cnt;
TRACT **tracts;
} TASET;


void load(TASET *taset);
TASET *taset;



void main()
{
TRACT *ta;


taset = (TASET*) malloc (sizeof(TASET));
taset->tracts = (TRACT**)malloc(sizeof(TRACT*));

ta = (TRACT*)malloc(sizeof(TRACT) +(2) *sizeof(int));
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;


}