J'ai un objet que je libère avec delete, et il a un char*
qui est libéré avec free dans son destructeur. La raison pour laquelle j'utilise libre est parce que j'ai utilisé strdup et malloc
dans la création des pointeurs char
. La raison pour laquelle j'utilise malloc
est que j'ai utilisé strdup dans la plupart des chemins de code. Ce scénario provoquerait-il une corruption de la mémoire?Utilisation libre dans le destructeur d'un objet libéré avec suppression
Répondre
Non, si vous correspondez appels correctement pour dire free()
mémoire allouée avec malloc()
et delete
pour mémoire allouée avec new
, cela fonctionnera très bien.
Ce que vous faites est correct. Une classe qui a été new
ed doit être désaffectée avec delete
, mais si elle possède la mémoire allouée avec malloc
(directement ou indirectement), elle doit libérer cette mémoire avec free
.
Votre implémentation est correcte. Vous utilisez free() pour libérer de la mémoire allouée avec malloc() (ou strdup()) et c'est exactement ce qu'il faut faire.
L'exigence est que vous libérez de la mémoire avec une primitive correspondant à celle utilisée pour allouer cette mémoire. Et cette exigence est satisfaite dans votre implémentation.
J'ai compris ce qui n'allait pas. Je passais mon objet comme une copie à travers une méthode, et il a gardé le char*
à travers; lorsque la fonction est terminée, cet objet temporaire a été supprimé, libérant le char*
. Maintenant, j'ai besoin de char*
après la sortie de la méthode, mais c'est parti maintenant. Deux *
et moins un l'ont réparé.
- 1. Suppression d'un objet avec un destructeur privé
- 2. android déterminer objet libéré GC
- 3. objet ne se libéré dans l'iPhone
- 4. Exception dans le destructeur
- 5. différence entre zéro et objet libéré
- 6. appel récursif involontaire dans destructeur
- 7. Suppression des contrôles de FlowLayoutPanel n'appelant pas de destructeur?
- 8. Appeler destructeur dans la méthode objet en PHP
- 9. problème avec la suppression d'un objet photo
- 10. Botan :: SecureVector - Destructeur appelé dans le constructeur?
- 11. Suppression accesseurs d'un objet
- 12. Attendre que le fichier soit libéré par le processus
- 13. Suppression objet de NSMutableArray
- 14. Classe Destructeur Problème
- 15. Appeler destructeur via le pointeur vide avec des modèles
- 16. Suppression d'un objet dans la fonction
- 17. Utilisation d'un objet DataTable avec Silverlight
- 18. destructeur statique
- 19. problème avec l'utilisation de libre
- 20. Mutex non libéré
- 21. Comment est-ce que je peux être libre dans le code d'un objet invariant?
- 22. Point-libre dans Haskell
- 23. Utilisation de l'instruction avec un objet nul
- 24. Suppression d'un objet de IEnumerable
- 25. Java: suffisamment de tas libre pour créer un objet?
- 26. UIImage dans le thread n'est pas libéré/écrasé
- 27. Suppression d'une collection avec NHibernate Utilisation de l'API Criteria
- 28. Le destructeur inutilisé sera-t-il optimisé?
- 29. Destructeur pour Singleton
- 30. PHP: destructeur vs register_shutdown_function
Je pense qu'il y a un malentendu ici, votre objet contient seulement un pointeur vers une autre zone mémoire où les caractères sont réellement stockés. Par conséquent, vous ne libérez pas la mémoire contenue dans l'objet, donc tout va bien. –
Je ne pense pas qu'il devrait y avoir un problème, mais avez-vous rencontré des problèmes en faisant cela? Curieuse. –
Vous devez mentionner comment vous avez alloué/initialisé votre objet qui contient le pointeur. – sellibitze