Le mie struct sono queste:
codice:
typedef struct percorso{
	long id; 
	//char id[20];
	int n; // numero di nodi
	nodo *nodi;
	} percorso;
typedef struct nodo{
	long id;
	//(char id[20];
	int oraArr;
	int oraPart;
} nodo;
il pezzo di main è questo:
codice:
int g=contiene(percorsi, A[j].B[h].id, p); //restituisce l'indice se è presente in percorsi
			if(g>=0){
				int d=percorsi[g].n;
				percorsi[g].n=d+addnodo(&percorsi[g].nodi, A[j].id, A[j].B[h].oraArr, A[j].B[h].oraPart, d);
				}
			else{
				p=p+addpercorso(&percorsi, A[j].B[h].id, p);
				int d=percorsi[p-1].n;
				percorsi[p-1].n=d+addnodo(&percorsi[p-1].nodi, A[j].id, A[j].B[h].oraArr, A[j].B[h].oraPart, d);}
	}
le funzioni sono queste:


codice:
int addnodo(nodo **n, long s, int oa, int op, int c){
	c++;
	(*n)=realloc((*n), c*sizeof(nodo));
	(*n)[c-1].id = s;
	(*n)[c-1].oraArr=oa;
	(*n)[c-1].oraPart=op;
	return 1;
}
int addpercorso(percorso **ps, long s, int n){
	n++;
	(*ps)=realloc((*ps),n*sizeof(percorso));
	(*ps)[n-1].id=s;
	return 1;
	}
Vi spiego un pò:
C'è una array di strutture in cui viene aggiunto un percorso solo se un id fa parte già di un percorso già inserito. Se non c'è la funzione ritorna -1 e quindi crea un percorso e aggiunge una struttura nodo all'array nodi del percorso in questione. Se invece esiste già aggiunge solo un nodo all'array del percorso con l'indice ritornato dalla funzione contiene.

Il problema è che quando vado a creare il percorso senza inizializzare n visto che n viene aggiornato dalla funzione a volte viene assegnato un valore casuale di 5 cifre. Questo succede solo se i campi id sia di nodo che di percorso sono long mentre se sono char è tutto corretto.