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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top