我在C#中有一些带有com包装器的代码。此com包装器用于本机c ++应用程序。 c ++代码使用一种方法,该方法从c#库返回一个类的实例数组。实例来自SafeArray,如下所示:
for (long i =min; i<=max;i++)
{
IMyInterface *l = (IMyInterface *)malloc(sizeof IMyInterface );
SafeArrayGetElement(array,&i, &l);
<other code>
}
我想释放为实例l分配的内存,但是如果我调用
free(l)
然后我崩溃了。
我试过了
VariantClear ((VARIANT*)l);
并使用
SafeArrayDestroy(array)
但是仍在为数组中的每个实例泄漏4个字节。
我应该如何释放这段记忆?
答案 0 :(得分:0)
这段代码看起来有点混乱:你将“sizeof IMyInterface”传递给malloc(),它将是IMyInterface实例的内存大小,而不是指向它的指针:你可能的意思是“sizeof IMyInterface * “如果你想为指针分配内存。
然而,看着它,这也没有任何意义:你最好不去做malloc()吗? SafeArrayGetElement()的最后一个参数是一个指向将保存结果的内存的指针,因此l(malloc()返回的指针)的内容将被覆盖(这就是free()让你崩溃的原因)。换句话说,这应该工作:
IMyInterface *l;
SafeArrayGetElement(array,&i, &l);
在不确切知道数组中的内容的情况下,确定并不容易,但看起来您对指针与它们指向的对象之间差异的旧C / C ++问题感到困惑。