Lors de l'allocation d'un nouveau BSTR avec Sysallocstring via un wchar_t * sur le tas, devrais-je alors libérer l'original wchar_t * sur le tas?
est-ce la bonne façon? P>
wchar_t *hs = new wchar_t[20]; // load some wchar's into hs... BSTR bs = SysAllocString(hs); delete[] hs;
5 Réponses :
Comme son nom l'indique, sysallocstring code> attribue sa mémoire, il ne "adopte" pas la mémoire de son argument. Les BSTR sont la taille-préfixe et em> résiliés null, donc "Adopter" une chaîne de style C est impossible, car il n'y a pas d'espace pour le préfixe de taille. P>
Oui, Supprimer code> la mémoire. P>
sysallocstring (), du Documentation , se comporte comme ceci:
Cette fonction attribue une nouvelle chaîne et copie la chaîne passée. P> blockQquote>
Donc, oui, une fois que vous avez appelé SysallOcstring, vous pouvez libérer votre tableau de caractères d'origine, car les données ont été copiées dans la nouvelle allouée BSTR. P>
la bonne façon de libérer une chaîne de
wchar_t code> attribué avec
nouveau [] code> est d'utiliser
Suppr [] code>. p>
BSTR bs = SysAllocString(hs); ... SysFreeString(bs);
Pour convertir wchar_t * code> sur
olechar * code> Vous devez utiliser
w2ole code>
macro:
Genre de drôle - j'ai complètement mal interprété les variables lorsque j'ai posté ma réponse (que j'ai ensuite supprimé). J'ai "vu" Supprimer [] BS; au lieu de hs. Je dois avoir besoin de nouveaux verres.