如果使用
分配动态数组intPtr = new int[1234];
在c ++中,数据随后被封送到托管C#数组,使用
释放管理端最初分配的内存是否有效Marshal.FreeHGlobal()
或者这会泄漏内存吗?
如果这确实泄漏了内存,是否有另一种方法可以在托管端使用以干净地释放内存,或者是否有必要在本机端实现释放代码并将回调函数传递给托管端?< / p>
谢谢!
答案 0 :(得分:1)
您无法从C#拨打free
/ delete
。你必须这样做C / C ++方面(默认情况下new
/ malloc
使用&#34;私有&#34; C / C ++分配器)。正确的方法是在C / C ++库中公开Free(IntPtr)
方法,或者只使用共享分配器(但请注意,如果要在释放内存时调用C ++析构函数,那么你必须在C ++中进行delete
显然在C / C ++中你可以使用LocalAlloc
分配内存然后在C#中你可以使用Marshal.FreeHGlobal()
,但是我们在 OR中只使用共享分配器 case(你仍然遇到无法从C#调用C ++析构函数的问题)