PDA

View Full Version : new e delete


MaxTora
05-02-2007, 13:26
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 ;)

MaxTora
05-02-2007, 13:58
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
...

MaxTora
05-02-2007, 14:05
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

andbin
05-02-2007, 14:27
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