CiaoOriginariamente inviato da lolide
L'errore dice
Gia ti dovrebbe far pensare che non è che alloca male la memoria, ma la libera male, ed il perchè è evidente:codice:*** glibc detected *** /home/adrycast/workspace/animali_derivazione/Debug/animali_derivazione: free(): invalid pointer: 0xbfc5b604 ***
Perchè chiami esplicitamente il distruttore ?
Viene fatto implicitamente quando viene distrutto l'oggetto. Il problema è che crei degli oggetti sullo stack e poi li fai puntare da un reference.
Fai delete sulle reference quindi il compilatore (non tutti) non vedono un errore, ma è sbagliato: prima li distruggi con delete, ma poi vengono distrutti a loro volta perchè sono statici, quindi di fatto richiami 2 volte i distruttori.
Togli i delete e le chiamate ai distruttori perchè non servono. La memoria di quegli oggetti viene liberata perchè sono statici.
PS: per il problema di cin prova a fare cin.flush prima di get
grazie per la risposta (anche perchè forse ho scritto un post un pò troppo corposo)
Purtroppo non è quello il problema.
Infatti di solito non richiamo mai i distruttori, è un aggiunta che ho fatto in seguito alla prima esecuzione dove mi dava sempre gli stessi messaggi in output. Preso dall'idea della memoria ho pensato che per qualche strana ragione non mi deallocava bene gli spazi e cosi ho esplicitato le chiamate ma con o senza la "deallocazione esplicita" non mi cambia praticamente nulla![]()
![]()