Ciao,
quando faccio partire il debug del io programma mi intterompe alla riga scritta in stampatello (l'ultimo ciclo for) indicandomi "Eccezione generata in corrispondenza di 0x00007FF69C7C1EDA in Project1.exe: 0xC0000005: violazione di accesso durante la lettura del percorso 0x0000000000000000".
Ho usato questo programma per giorni e non mi ha mai dato questo problema, oggi ha iniziato a fare così senza che io abbia modificato nulla di questa funzione. Dovrebbe essere un problema di puntatori/uso sbagliato della memoria alloata, ma non riesco a capire quale sia il probolmea e perchè sia sorto solo oggi.
typedef struct datolistaTR { /*Lista di liste*/
transizione tran;
struct datolistaTR *dx;
struct datolistaTR *sub;
}dato;
dato* InserisciOrdine(dato* head, transizione t) {
dato *nuovo, *p, *h;
if (nuovo = (dato*)malloc(sizeof(dato))) {
nuovo->tran.stato_i = t.stato_i;
nuovo->tran.stato_f = t.stato_f;
nuovo->tran.letto = t.letto;
nuovo->tran.scritto = t.scritto;
nuovo->tran.mossa = t.mossa;
}
/*se la lista è vuota*/
if (head == NULL) {
nuovo->dx = NULL;
nuovo->sub = NULL;
head = nuovo;
return head;
}
/*altrimenti controllo se devo inserire l'elemento come primo*/
p = head;
if (p->tran.stato_i > t.stato_i) {
nuovo->dx = p;
nuovo->sub = NULL;
head = nuovo;
return head;
}
/*else, cioè p->tran.stato_i<=t.stato_i*/
while (p->dx != NULL && p->dx->tran.stato_i <= t.stato_i)
p = p->dx;
if (p->tran.stato_i == t.stato_i) {
if (p->tran.letto > t.letto || (p->tran.letto == t.letto && p->tran.scritto > t.scritto) || (p->tran.letto == t.letto && p->tran.scritto == t.scritto && p->tran.mossa > t.mossa) || (p->tran.letto == t.letto && p->tran.scritto == t.scritto && p->tran.mossa == t.mossa && p->tran.stato_f > t.stato_f)) {
nuovo->dx = p->dx; /*Inserisco l'elemento come primo della lista verticale*/
nuovo->sub = p;
p->dx = NULL;
FOR(H=HEAD;H->DX->TRAN.STATO_I != T.STATO_I; H=H->DX)
;
h->dx = nuovo;
return head;
}
qui la funzione prosegue con altre situazioni di innserimento.
Grazie in anticipo.