我使用以下方法在我的C ++程序中托管.NET库,但不是详尽的列表:
CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
GetIDsOfNames()
最后打电话给Invoke()
。
这很好用,但是每当.NET函数返回一个数组时我就会泄漏内存,例如:
public int[] getArray() { int[] i = { 0, 1, 2, 3 }; return i; }
在这种情况下,函数返回VARIANT
类型VT_SAFEARRAY|VT_I4
。我在描述符和pvData成员上都尝试了delete
和delete[]
,这总是失败。我试过SafeArrayDestroy()
描述符,它成功但破坏了堆。我可以在SafeArrayDestroyData()
上调用variant.parray->pvData
,但工作正常,但SafeArrayDestroyDescriptor()
会再次破坏堆。我还在泄漏数组描述符。
那么,我如何解除分配SAFEARRAY描述符并插入内存泄漏?
答案 0 :(得分:2)
没有看到代码就无法猜测。无论如何,堆可能早就被破坏了。
您应该使用VariantClear()。