Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Marshal.FreeHGlobal()释放先前分配了“0”的数组;新";在本土?_C#_C++_Memory Management_Marshalling - Fatal编程技术网

C# 使用Marshal.FreeHGlobal()释放先前分配了“0”的数组;新";在本土?

C# 使用Marshal.FreeHGlobal()释放先前分配了“0”的数组;新";在本土?,c#,c++,memory-management,marshalling,C#,C++,Memory Management,Marshalling,如果为动态数组分配了 intPtr = new int[1234]; 在C++中,数据随后被封送到托管的C数组,有效的是使用释放托管端上的原始分配内存。 Marshal.FreeHGlobal() 还是会泄漏内存 如果这确实会泄漏内存,那么在托管端是否可以使用另一种方法来干净地释放内存,或者是否有必要在本机端实现释放代码并向托管端传递回调函数 谢谢 你不能从C#调用免费/删除。您必须在C/C++端执行此操作(默认情况下,new/malloc使用“私有”C/C++分配器)。正确的做法是在C/C

如果为动态数组分配了

intPtr = new int[1234];
在C++中,数据随后被封送到托管的C数组,有效的是使用

释放托管端上的原始分配内存。
Marshal.FreeHGlobal()
还是会泄漏内存

如果这确实会泄漏内存,那么在托管端是否可以使用另一种方法来干净地释放内存,或者是否有必要在本机端实现释放代码并向托管端传递回调函数


谢谢

你不能从C#调用
免费
/
删除
。您必须在C/C++端执行此操作(默认情况下,
new
/
malloc
使用“私有”C/C++分配器)。正确的做法是在C/C++库中公开<代码>自由(ItpTR)< /C>方法,或者只使用共享分配器(但是注意如果希望C++析构函数在内存中调用,则必须在C++中执行<代码>删除< /代码>


<> P>清楚地在C/C++中可以分配内存,然后在C++中你可以使用<代码> MARHALL .FrHyGualLand()/Cuth>,但是我们在或只使用共享分配器的情况下(你仍然存在无法从C++中调用C++析构函数的问题)

简短的答案:你只会造成损坏,不会释放任何东西。你需要释放内存C++端。例如:苹果和橘子。在C++窗口中通过<代码>新< /COD>分配的内存与Win32 API中的<代码> GULALFALE/HEAPXXXXX < /代码>函数无关。您甚至不应该在c/c++方面混合使用这两者。