|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2004
Città: Milano
Messaggi: 415
|
[C] liste e funzioni
Ho un problema con le funzioni di inserimento in una lista ordinata.
Devo inserire in una lista di assex vuota, una lista di asse y vuota alla quale assegnerò una biglia. Il problema è che il tutto funziona, assegno la biglia, ma poi tornando alla funzione chiamante, il puntatore alla nuova struttura rimane NULL. void inseriscix(struct assex *pl, int x, int y, struct biglia *b) { if(pl==NULL) { pl=malloc(sizeof(struct assex)); (*pl).x=x; (*pl).nextx=NULL; (*pl).nexty=NULL; inserisciy((*pl).nexty,x,y,b); return; } } void inserisciy(struct assey *pl, int e, int z, struct biglia *b) { if(pl==NULL) { pl=malloc(sizeof(struct assey)); (*pl).x=e; (*pl).y=z; (*pl).nexty=NULL; (*pl).b=b; return; } } Quindi inseriscix richiama inserisciy che assegna correttamente la biglia (ho verificato con il debug), ma quando ritorna il comando a inseriscix, mi da che (*pl).nexty = NULL invece che puntare all'indirizzo della nuova struttura creata dalla funzione inserisciy. Lo stesso problema lo riscontro nel ritorno da inseriscix al main. dov'è l'errore? grazie..
__________________
Ho concluso con Worp, -V3G3TA-, Marco911, TheDragon81, ciociola ------------------------------------------------ Diego |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Leggi qui:
http://www.hwupgrade.it/forum/showpo...28&postcount=3 Ti trovi davanti alla stessa situazione, il valore assegnato a pl, in entrambi i casi, viene perso perché hai passato il puntatore pl per valore. O passi pl per indirizzo o ritorni pl alla fine della funzione. Attenzione: (*pl).x equivale a pl->x |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2004
Città: Milano
Messaggi: 415
|
struct assey* inserisciy(struct assey *pl, int e, int z, struct biglia *b)
{ if(pl==NULL) { pl=malloc(sizeof(struct assey)); (*pl).x=e; (*pl).y=z; (*pl).nexty=NULL; (*pl).b=b; return pl; } } perchè non funziona nemmeno così??
__________________
Ho concluso con Worp, -V3G3TA-, Marco911, TheDragon81, ciociola ------------------------------------------------ Diego |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Come hai richiamato quella funzione ?
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2004
Città: Milano
Messaggi: 415
|
void inseriscix(struct assex *pl, int x, int y, struct biglia *b)
{ if(pl==NULL) { pl=malloc(sizeof(struct assex)); (*pl).x=x; (*pl).nextx=NULL; (*pl).nexty=NULL; (*pl).nexty=inserisciy((*pl).nexty,x,y,b); return; } }
__________________
Ho concluso con Worp, -V3G3TA-, Marco911, TheDragon81, ciociola ------------------------------------------------ Diego |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La stessa cosa la devi fare anche per inseriscix, altirmenti il chiamante non trova pl modificato
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2004
Città: Milano
Messaggi: 415
|
si ma con questo codice, all'interno di inseriscix, al termine della funzione mi da che pl contiene la x corretta e due puntatori a null...
quello a nextx giustamente, ma quello a nexty (viste le modifiche di inserisciy) dovrebbe essere diverso da null.. ho riprovato e funziona...
__________________
Ho concluso con Worp, -V3G3TA-, Marco911, TheDragon81, ciociola ------------------------------------------------ Diego Ultima modifica di diego86 : 29-02-2008 alle 16:13. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:26.



















