Question

Je suis un programme d'hébergement bibliothèque .NET dans mon C ++ en utilisant les méthodes suivantes, mais pas une liste exhaustive:

CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
GetIDsOfNames()

Et finalement, un appel à Invoke().

Cela fonctionne assez bien, mais je fuite de mémoire chaque fois qu'une fonction retourne .NET Un tableau, comme:

public int[] getArray() { int[] i = { 0, 1, 2, 3 }; return i; }

Dans ce cas, la fonction retourne un VARIANT de type VT_SAFEARRAY|VT_I4. J'ai essayé delete et delete[] tant sur le descripteur et membre pvData, et cela est toujours un échec. J'ai essayé de SafeArrayDestroy() le descripteur, qui réussit, mais corrompt le tas. Je peux appeler SafeArrayDestroyData() sur variant.parray->pvData qui fonctionne très bien, mais SafeArrayDestroyDescriptor() corrompt à nouveau le tas. Je suis toujours fuit les descripteurs de tableau.

Alors, comment puis-je désaffecter le descripteur de SAFEARRAY et branchez cette fuite de mémoire?

Était-ce utile?

La solution

Impossible de deviner sans voir le code. Le tas aurait été corrompu longtemps avant de toute façon.

Vous devez utiliser VariantClear ().

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