Per alcune esercitazioni mi sarebbe molto utile poter testare eventuali mie funzioni su alberi binari o generici.Avete qualche codice che implementa magari delle classi su queste strutture dati?
Oppure mi consigliate qualcosa in particolare?
Per alcune esercitazioni mi sarebbe molto utile poter testare eventuali mie funzioni su alberi binari o generici.Avete qualche codice che implementa magari delle classi su queste strutture dati?
Oppure mi consigliate qualcosa in particolare?
Io ho un template di albero binario che però non si bilancia ma funziona se ci metti i giusti input Se vuoi te lo scrivo con tanto di esempio con classe affina
In teoria l'albero binario si deve bilanciare da solo, io metto un valore e lui deve aggiustare l'albero affinché sia bilanciato. Ecco io, ora come ora, non mi ci sono messo troppo di impegno e non ho sviluppato una funzione del genere. Comunque ti posto l'albero, il main ed una classe creata al volo.
treenode.h
Spoiler:
tree.h
Spoiler:
myclass.h
Spoiler:
myclass.cpp
Spoiler:
main.cpp
Spoiler:
Se come input del cin metti questi valori in questo ordine, avrai lo steso output, sia per l'albero di interi che per l'albero di myclass: 50 25 75 12 33 67 88 6 13 68
Ti ringrazio.Ora in questi 2 giorni lo guarderò con maggior attenzione perchè oggi non mi è possibile.Comunque dando una breve occhiata non ho visto alcun distruttore...Non ti crea alcun problema?
Il sistema operativo rilascerà comunque la memoria. Resta il fatto che è un pessimo modo di procedere
no intendo, in che senso l' SO rilascerà cmq la memoria? Se è vero questo allora quand' è che si ha davvero memory leak?
Cmq questo albero senza distruttore è riportato anche sul deitel, mi meraviglio
Quando un processo viene creato, gli viene assegnata una zona di memoria chiamata spazio degli indirizzi del processo.
Al suo interno vengono inizializzate tutte le strutture dati necessarie per il cosidetto supporto a runtime (tra cui lo stack).
Quando allochi qualcosa finisce in questo spazio di memoria (e non potrebbe essere altrove visto che il processo non vede niente al di fuori del suo spazio degli indirizzi).
Ovviamente quando il processo termina lo spazio degli indirizzi torna al sistema operativo che lo dara al prossimo processo che ne fa richiesta, eliminando ogni cosa allocata e quindi pulendo la memoria.
Il memory leak si ha durante l'esecuzione del processo, quando non si ha piu un puntatore valido a una zona di memoria allocata che quindi e inutilizzabile dal processo stesso. Ma ovviamente nella pulizia generale del sistema operativo alla chiusura del processo quwsta viene ritornata (allocata o non).
Quello che si intendeva e che per esercizi cosi semplici che terminano subito il distruttore non serve perche non c'e leak, anche se sarebbe buona regola scriverlo sempre...
ah capisco, io pensavo che la memoria non deallocata venisse liberata solo con lo shutdown dell' alimentazione.... però giustamente come dici tu bisogna comunque liberarla sempre...
La cosa che mi fa strano come ho scritto è che sul deitel l' albero è implementato senza distruttore e non riesco a spiegarmi perchè...