PDA

Visualizza la versione completa : [C++] Puntatori che non vanno in alberi n-ari


Neptune
23-12-2010, 02:44
Salve a tutti,
ho un problema veramente strano su una determinata realizzazione degli alberi N-ari.

In poche parole ho una superclasse che si chiama Albero, che ha solo metodi virtuali, ed una classe figlia AlberiLD che implemente una determinata realizzazione di alberi in questo modo:

Ovvero ci sono due tipi di nodo, un nodo etichetta ed un nodo di servizio. Il nodo etichetta punta ad un etichetta di tipo _tipoelem, ed al primo figlio del nodo stesso.

Il figli a loro volta sono una lista di nodi di servizio (puntati dai vari puntatori a primo figlio) sono una lista di puntatori che puntano al fratello di un determinato nodo, ed ad un etichetta.

Ovvero ho una radice R di tipo nodo etichetta, se prendo il puntatore a primofiglio ottengo il primo della lista di nodi di servizio, questa lista è una lista di puntatori ai figli di R. Spostandomi su un figlio di R potrò passare ad un'altra lista di nodi servizio per ottenere i figli del figlio di R e così via.

Non ci sono collegamenti verso l'alto ovvero ogni volta per sapere il padre di un nodo devo scorrrermi l'albero n-ario dalla radice e farmi i confronti.

I due tipi di nodi vengono gestiti tramite una union che mi sta dando non pochi problemi.

Un problmea che mi da è che la mia funzione insprimofiglio (che inserisce un albero come primo figlio di un determinato nodo), applicata sulla radice, mi inserisce il primo figlio, il secondo, poi quando inserisce il terzo mi perde il primo, quando inserisco il quarto mi perde il secondo. Insomma non so come mi rimangono memorizzati solo gli ultimi nodi inseriti.

Ci sto veramente impazzendo da tutta una giornata, vi copioincollo il codice su ideone e se avete qualche idea è sempre ben accetta :fagiano:
http://www.ideone.com/QtiTi

Vi ringrazio in anticipo per qualsiasi aiuto,
Neptune.

Neptune
23-12-2010, 03:03
Mi sa che erano quelle assert che mi combinavano casini senza manco accorgermene.

Qual'è il modo più elegante secondo voi per risolvere quelle assert? Voi direte una bella gestione delle eccezzioni?

Neptune
23-12-2010, 03:55
Ho momentaneamente aggiornato tutti gli assert con degli if per evitare scherzetti e questa è la versione del codice aggiornata:

http://www.ideone.com/6lpa7

Ora però ho un problema, su windows il codice viene compilato senza errori, viene eseguito del tutto, solo che alla fine dell'esecuzione termina come se fosse crashato, ovvero mi appare una schermata che dice "che ha smesso di funzionare" come qunado crasha (eppure non ce ne sono più di assert nascoste che lo fanno terminare. Inoltre esegue tutto "bene" o almeno credo.

Su Xubuntu invece si esegue normalmente e senza crashare.

Qui su windows ho eclipse + mingw, su ubuntu ho eclipse e credo g++ o qualcosa di simile.

Secondo voi cosa può essere? come mai crasha cosi? Anche su ideone dice che "ci sono problemi" quando non ce ne sono.

Loading