2

我正在使用以下方法在我的 C++ 程序中托管一个 .NET 库,但不是一个详尽的列表:

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

并最终调用Invoke().

这工作得很好,但是每当 .NET 函数返回一个数组时,我都会泄漏内存,例如:

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

在这种情况下,函数返回 aVARIANT类型VT_SAFEARRAY|VT_I4。我已经尝试过描述符deletedelete[]pvData 成员,但这总是失败。我尝试SafeArrayDestroy()了描述符,它成功但破坏了堆。我可以调用哪个工作正常,但SafeArrayDestroyData()又会破坏堆。我仍在泄漏数组描述符。variant.parray->pvDataSafeArrayDestroyDescriptor()

那么,我怎样才能解除分配 SAFEARRAY 描述符并堵住这个内存泄漏呢?

4

1 回答 1

2

没有看到代码是不可能猜到的。无论如何,堆可能早就被破坏了。

您应该使用 VariantClear()。

于 2011-03-17T01:27:11.300 回答