2009-10-28 6 views
2

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

+0

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. –

+0

Je ne pense pas qu'il devrait y avoir un problème, mais avez-vous rencontré des problèmes en faisant cela? Curieuse. –

+0

Vous devez mentionner comment vous avez alloué/initialisé votre objet qui contient le pointeur. – sellibitze

Répondre

5

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.

2

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.

1

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.

0

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é.