|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Dec 2003
Città: Piano di Sorrento (NA)
Messaggi: 924
|
[C++] Problema distruttori
Salve,
ho queste 2 classi: Codice:
// 1° classe
class Partita {
char * SquadraA;
char * SquadraB;
public:
[...]
~Partita ( ) { cout << "distruttore PARTITA" << endl; delete [] SquadraA; delete [] SquadraB; };
};
// 2° classe
class Lista
{
Nodo * testa;
public:
[...]
~Lista ( ) {
Nodo * aux = testa;
while ( testa )
{
cout << "distruttore LISTA" << endl;
aux = testa;
testa = testa->Nptr; // puntatore al prossimo Nodo
delete aux;
}
}
};
Codice:
Lista * L = new Lista; Partita P; L.inserisciPartita ( P ); // inserisco una Partita nella Lista delete L; Ma i costruttori son scritti giusti? Il risultato che mi stampa è: Quote:
cosa c'è che non va nei distruttori? Ah, se ometto quel "delete L;" il programma termina correttamente. Grazie :ciauz:
__________________
Affari conclusi perfettamente con: falcao3, maxmax80 |
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
testa = testa->Nptr; // puntatore al prossimo Nodo
e se testa è NULL ? |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2003
Città: Piano di Sorrento (NA)
Messaggi: 924
|
Il while dovrebbe fermarsi e quindi non potrebbe eseguire "delete NULL;"... o no? :o
__________________
Affari conclusi perfettamente con: falcao3, maxmax80 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Hai provato ad eseguire il programma in debug?
E comunque come inizializzi Nptr? Perchè ho il vago sospetto che non lo imposti a NULL e quindi il while(testa) non si fermi fino a che non vai a cancellare qualcosa di errato. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2003
Città: Piano di Sorrento (NA)
Messaggi: 924
|
Però ho provato lo stesso ciclo per la stampa degli elementi nella Lista e funziona perfettamente...
Non dovrebbe essere lo stesso anche per il distruttore?
__________________
Affari conclusi perfettamente con: falcao3, maxmax80 |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Dec 2009
Messaggi: 9
|
I distruttori non dicono molto senza le parti dove allochi e assegni quei campi, dovresti postare anche quelle
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2003
Città: Piano di Sorrento (NA)
Messaggi: 924
|
Ragazzi,
ma se ho ad esempio: Codice:
struct Nodo
{
Nodo * next;
int elemento;
};
Codice:
Nodo * q = new Nodo; Ma non è che mi cancella anche l'area di memoria puntata da "next"? Perchè potrebbe essere questo il problema...
__________________
Affari conclusi perfettamente con: falcao3, maxmax80 |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non te la cancella l'area puntata da next.
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2003
Città: Piano di Sorrento (NA)
Messaggi: 924
|
Pochi minuti fa mi è venuta l'illuminazione ed ho risolto overloadando l'operatore di assegnazione della classe Partita:
Codice:
const Partita & operator = ( const Partita & P ); Quindi deallocando la variabile "da cui proveniva" e poi rieseguendo il delete della stessa variabile (dal distruttore) crashava perchè già eliminata. Non so se mi son spiegato bene Grazie
__________________
Affari conclusi perfettamente con: falcao3, maxmax80 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:31.




















