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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top