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.