 
View Full Version : new e delete
Ciao a tutti 
Volevo sapere una cosa:
io alloco la memoria con
int *M = new int;
delete M;
volevo sapere c'è un metodo per sapre se la memoria allocata è stata disallocata?
trallallero
05-02-2007, 13:42
Ciao a tutti 
Volevo sapere una cosa:
io alloco la memoria con
int *M = new int;
delete M;
volevo sapere c'è un metodo per sapre se la memoria allocata è stata disallocata?
e perché non dovrebbe essere deallocata ? :mbe:
da quello che so io se non dealloca da errore quindi basta intercettarlo
con qualcosa del genere:
   ...
   try
   {
      delete M;
   }
   exception (...)
   {
      <gestione errore>
   }
trallallero
05-02-2007, 13:43
Comunque di solito si controlla se È stata allocata non il contrario ;)
Hai ragione mi sono spiegato male
io alloco lamemoria in un punto del programma ma non è detto che venga allocata quindi se io dopo la disalloco non avendola mai allocata mi da errore :confused:  :confused:  :confused:  :confused:
trallallero
05-02-2007, 14:03
Hai ragione mi sono spiegato male
io alloco lamemoria in un punto del programma ma non è detto che venga allocata quindi se io dopo la disalloco non avendola mai allocata mi da errore :confused:  :confused:  :confused:  :confused:
appunto ti ho detto: di solito si controlla se È stata allocata non il contrario.
   int *P = NULL;
   P = new int;
   if ( P == NULL )
      errore
   if (P) delete P; // SAREBBE INUTILE IL CONTROLLO PERCHE GIÁ CONTROLLATO PRIMA
   ...
Ok tutto chiaro grazie 1000  :)
trallallero
05-02-2007, 14:08
Ok tutto chiaro grazie 1000  :)
di niente :)
Ma spero che non sia veramente quella l'istruzione di alloc altrimenti ti consiglio di espandere un pelo la RAM :D
A dire il vero .. il comportamento di default è che se new non riesce a soddisfare la richiesta, lancia un oggetto di tipo bad_alloc.
Se si vuole avere un NULL, si può fare:
.... = new (std::nothrow) .....;
trallallero
05-02-2007, 14:56
A dire il vero .. il comportamento di default è che se new non riesce a soddisfare la richiesta, lancia un oggetto di tipo bad_alloc.
Se si vuole avere un NULL, si può fare:
.... = new (std::nothrow) .....;
si vero, anche qui usiamo sempre la try - catch() ...
ma son quasi sicuro che anni fa col Borland Builder C++ usavo il controllo del NULL
Possibile ? O magari sbagliavo e m'é andata di culo, ha sempre allocato bene :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.