Utiliser free dans le destructeur d'un objet libéré avec delete
-
06-07-2019 - |
Question
J'ai un objet que je libère avec delete et il a un char *
qui est libéré avec free dans son destructeur. J'utilise free gratuitement parce que j'ai utilisé strdup et malloc
pour créer les pointeurs char
. Si j'utilise malloc
, c'est parce que j'ai d'abord utilisé strdup dans la plupart des chemins de code. Ce scénario provoquerait-il une corruption de mémoire?
La solution
Non, si vous faites correspondre les appels correctement, c'est-à-dire free ()
pour la mémoire allouée avec malloc ()
et delete
pour la mémoire allouée avec new
, cela fonctionnera correctement.
Autres conseils
Ce que vous faites est correct. Une classe qui a été new
ed doit être désallouée avec delete
, mais si elle possède une mémoire allouée avec malloc
(directement ou indirectement) alors il devrait désallouer cette mémoire avec free
.
Votre implémentation est correcte. Vous utilisez free () pour libérer la mémoire allouée avec malloc () (ou strdup ()) et c’est exactement ce que vous devez faire.
La condition est que vous libériez de la mémoire avec une primitive correspondant à celle utilisée pour l'allocation de cette mémoire. Et cette exigence est satisfaite dans votre implémentation.
J'ai compris ce qui n'allait pas. Je transmettais mon objet sous forme de copie à une méthode et le char *
était conservé; à la sortie de la fonction, cet objet temporaire a été supprimé, libérant le char *
. Maintenant, j'ai besoin de char *
après la fin de la méthode, mais c'est fini maintenant. Deux *
et un moins l'ont corrigé.