我正在使用以下方法在我的 C++ 程序中托管一个 .NET 库,但不是一个详尽的列表:
CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
GetIDsOfNames()
并最终调用Invoke()
.
这工作得很好,但是每当 .NET 函数返回一个数组时,我都会泄漏内存,例如:
public int[] getArray() { int[] i = { 0, 1, 2, 3 }; return i; }
在这种情况下,函数返回 aVARIANT
类型VT_SAFEARRAY|VT_I4
。我已经尝试过描述符delete
和delete[]
pvData 成员,但这总是失败。我尝试SafeArrayDestroy()
了描述符,它成功但破坏了堆。我可以调用哪个工作正常,但SafeArrayDestroyData()
又会破坏堆。我仍在泄漏数组描述符。variant.parray->pvData
SafeArrayDestroyDescriptor()
那么,我怎样才能解除分配 SAFEARRAY 描述符并堵住这个内存泄漏呢?