Utilizzo gratuito all'interno del distruttore di un oggetto liberato con delete
-
06-07-2019 - |
Domanda
Ho un oggetto che sto liberando con delete, e ha un char *
che viene liberato gratuitamente nel suo distruttore. Il motivo che sto usando gratuitamente è perché ho usato strdup e malloc
nella creazione dei puntatori char
. Il motivo per cui sto usando malloc
è perché ho usato strdup per iniziare nella maggior parte dei percorsi di codice. Questo scenario causerebbe il danneggiamento della memoria?
Soluzione
No, se abbini correttamente le chiamate, ad esempio free ()
per la memoria allocata con malloc ()
e elimina
per la memoria allocata con nuovo
, funzionerà benissimo.
Altri suggerimenti
Quello che stai facendo è corretto. Una classe che è stata nuova
dovrebbe essere deallocata con delete
, ma se possiede una memoria allocata con malloc
(direttamente o indirettamente) quindi dovrebbe deallocare tale memoria con gratuito
.
L'implementazione è corretta. Usa free () per rilasciare la memoria allocata con malloc () (o strdup ()) e questo è esattamente cosa fare.
Il requisito è che si rilasci memoria con una primitiva corrispondente a quella utilizzata per allocare quella memoria. E questo requisito è soddisfatto nella tua implementazione.
Ho capito cosa non andava. Stavo passando il mio oggetto come una copia attraverso un metodo e ha mantenuto il char *
; quando la funzione è uscita, quell'oggetto temporaneo è stato cancellato, liberando il char *
. Ora ho bisogno del char *
dopo che il metodo è uscito, ma ora non c'è più. Due *
e meno uno l'hanno risolto.