Delete elemento di una lista

di zio_mangrovia il
3 risposte
In C++ quando cancello un elemento di una lista che è stato allocato dinamicamente in questo modo :

lista p=testa;
for(; p!=NULL; p=p->pun)
prec->pun=NULL; // trovo l'ultimo elemento
delete p;
if (p==testa)
testa=NULL;
else
prec->pun=NULL;


Se cancello l'elemento e quindi l'area di memoria puntata da p diventa inutilizzabile, il valore contenuto in p ci rimane oppure viene cancellato? La cosa più corretta sarebbe fare il test e poi cancellare, ma è solo una curiosità.

3 Risposte

  • In generale, se deallochi della memoria, il contenuto rimane ma non puoi fidarti della sua persistenza, lo spazio potrebbe essere utilizzato per altri dati in qualsiasi momento.
  • Non mi riferisco al contenuto della memoria puntata ma all'indirizzo di memoria contenuto in p il cui valore lo confronto con quello del puntatore testa ma solo dopo la delete con l'istruzione if (p==testa)
    Dopo che ho deallocato la zona di memoria, in p ci rimane sempre l'indirizzo di quell'area?
  • Si ci rimane l'indirizzo, che non è più valido. Quindi per sicurezza va settato a NULL.
Devi accedere o registrarti per scrivere nel forum
3 risposte