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;
}