View Full Version : Problema con una lista (Il c è vivo????)
*MATRIX*
17-01-2006, 11:19
Ho un problema creo il primo elemento di una lista rametto (in un altra parte del programma) dopodichè se da testiera ricevo l'ok provo ad inserire altri elementi nella lista rametto copiandoli dalla lista capa, sapreste dirmi perchè appena mando in esecuzione va in crash appena fa il malloc??? cercate di aiutarmi please!!!!!!! :mc: :cry:
while (rametto!=NULL)
rametto=rametto->succo;
rametto->succo=(struct lista *)malloc(sizeof(struct lista));
rametto=rametto->succo;
rametto->inf=capa->inf;
rametto->succo=NULL;
capa=capa->succ;
jappilas
17-01-2006, 11:35
stai accedendo a degli oggetti attraverso dei puntatori che puntano a loro
con questo codice:
while (rametto!=NULL)
rametto=rametto->succo;
tu iteri non finche' l' oggetto corrente della lista ha un "succo" (successore? :mbe: ) ma finche' non e' nullo;
l' ultimo oggetto nella lista avra' un puntatore non nullo che punti a lui stesso, ma un puntatore randomico (o ben che vada, nullo, se lo inizializzi nel costruttore dell' oggetto rametto) al suo successore, ancora non esistente
quindi salti in un punto che sicuramente non contiene un oggetto ...
a me hanno insegnato che la routine di iterazione su liste, alberi, ecc debba controllare la validita' del puntatore al successore
if (elementPtr -> next)
quindi imho l' errore e' qui
stefano_ba
17-01-2006, 11:38
Sono un po' arrugginito ma ci provo.
Tu fai il while sino a che rametto diventa null, a questo punto assegni alla locazione rametto->succo il risultato del malloc.
Ma rametto->succo e' una locazione non allocata, probabilmente fa riferimento ad una parte del sistema operativo, da qui il crash.
Sempre se non sbaglio, devo ricominciare a studiarmi il c.
Byez
Ho un problema creo il primo elemento di una lista rametto (in un altra parte del programma) dopodichè se da testiera ricevo l'ok provo ad inserire altri elementi nella lista rametto copiandoli dalla lista capa, sapreste dirmi perchè appena mando in esecuzione va in crash appena fa il malloc??? cercate di aiutarmi please!!!!!!! :mc: :cry:
while (rametto!=NULL)
rametto=rametto->succo;
rametto->succo=(struct lista *)malloc(sizeof(struct lista));
rametto=rametto->succo;
rametto->inf=capa->inf;
rametto->succo=NULL;
capa=capa->succ;
rametto ... succo ??? Ehh??? Ma che nomi hai dato??? :D
Sì ... a parte gli scherzi ho capito ... succo è il puntatore next. ;)
Non funziona per questo motivo: con il while vai a cercare l'ultimo elemento ma facendo come hai fatto, finito il while, rametto vale NULL!!! Quindi non puoi usare il puntatore in rametto. Ti devi fermare prima.
Prova a cambiare il while in:
while (rametto->succo!=NULL)
rametto=rametto->succo;
Finito il while, rametto punta all'ultimo elemento.
jappilas
17-01-2006, 13:00
Non funziona per questo motivo: con il while vai a cercare l'ultimo elemento ma facendo come hai fatto, finito il while, rametto vale NULL!!!
questo nel migliore dei casi: se poi nel costruttore dell' elemento rametto, il puntatore non venisse inizialzzato a null... :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.