PDA

View Full Version : [C++] Variabili dinamiche e delete


Albi89
17-03-2008, 23:44
Ciao a tutti!
Ho una piccola domanda da profano, e spero che qualcuno possa aiutarmi!

Prendiamo ad esempio il seguente codice:
Struct* p = new Struct;
Struct** elenco = new Struct*[5];
...
elenco[0] = p;
...
delete elenco[0];


Ho creato p, un puntatore ad una generica struttura allocata dinamicamente, ed un puntatore a puntatore a Struct, con lo spazio per una lista di 5 elementi simili susseguienti.
Dunque ho dato al primo elemento del mio elenco il valore del mio originario puntatore p.

Se voglio deallocare lo spazio occupato dalla struttura creata originariamente, è sufficiente usare "delete elenco[0];" o serve anche un "delete p;"?

Grazie per il consiglio, sicuramente sembrerà banale agli esperti che leggeranno ma mi sarete di grande aiuto! :oink:

71104
18-03-2008, 01:15
serve anche "delete p;". ad ogni new deve sempre corrispondere una e una sola delete: hai due new, devi avere due delete.

tomminno
18-03-2008, 07:41
serve anche "delete p;". ad ogni new deve sempre corrispondere una e una sola delete: hai due new, devi avere due delete.

Con "delete elenco[0];" ha eseguito "delete p;", a lui manca "delete [] elenco;"
Eseguendo anche "delete p;" va incontro a grossi problemi.

71104
18-03-2008, 09:07
giusto, scusa :O
colpa dell'ora :mc:

Albi89
18-03-2008, 11:26
Con "delete elenco[0];" ha eseguito "delete p;", a lui manca "delete [] elenco;"
Eseguendo anche "delete p;" va incontro a grossi problemi.

Sì sì certo alla fine di tutto eseguo un "delete [] elenco;" ma in quel punto del programma dovevo deallocare soltanto il primo elemento ;)
Grazie mille, il dubbio mi era nato quando ho letto sulle slide del prof che "una variabile dinamica è valida finchè vi è un riferimento valido" :mc:

The3DProgrammer
18-03-2008, 14:27
ovviamente, p in quel caso sarebbe un dangling pointer. Sarebbe opportuno anche un "p = NULL;" altrimenti rischi che tu stesso o qualcun altro usi quel puntatore prendendolo come riferimento valido, quando così non è.