Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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# 我是否应该释放所有IntPtr';我曾经和FreeHGlobal在一起';我受够了吗?_C#_Memory Management_Garbage Collection_Marshalling_Intptr - Fatal编程技术网

C# 我是否应该释放所有IntPtr';我曾经和FreeHGlobal在一起';我受够了吗?

C# 我是否应该释放所有IntPtr';我曾经和FreeHGlobal在一起';我受够了吗?,c#,memory-management,garbage-collection,marshalling,intptr,C#,Memory Management,Garbage Collection,Marshalling,Intptr,我的项目中有很多IntPtr,其中一些是从my dll返回的,因此,我没有使用Marshal.AllocHGlobal() 如何释放从dll函数返回的这些INTPTR Marshal.FreeHGlobal()或variable=IntPtr.Zero或两者 我在这个网站和微软文档上读到了一些问题,他们说Marshal.FreeHGlobal应该用于使用Marshal.AllocHGlobal分配的任何内存。 如果我们没有为IntPtr 谢谢你阅读我的问题 如何释放从dll函数返回的这些INTP

我的项目中有很多IntPtr,其中一些是从my dll返回的,因此,我没有使用
Marshal.AllocHGlobal()

如何释放从dll函数返回的这些INTPTR

Marshal.FreeHGlobal()
variable=IntPtr.Zero
或两者

我在这个网站和微软文档上读到了一些问题,他们说
Marshal.FreeHGlobal
应该用于使用
Marshal.AllocHGlobal
分配的任何内存。 如果我们没有为
IntPtr

谢谢你阅读我的问题

如何释放从dll函数返回的这些INTPTR

它取决于
CreatePart
的本机实现,但通常是通过将返回的指针传递给另一个名为
DestroyPart
的本机方法,或者在使用完该方法后传递给其他本机方法

是否可以实际使用
Marshal.FreeHGlobal
释放内存取决于分配内存的本机方法的实现。释放内存的方式必须与分配内存的方式相匹配

IntPtr
本身只是一种值类型:


请看,这不是一个好问题,主要会引起各种意见。@SimonPrice我的问题怎么了?我想知道我是否必须手动释放它们,或者它们将在没有看到您的代码的情况下自动释放,无法明确建议。但是,如果不分配任何内存,则根本不需要这两个选项中的任何一个。设置为
Zero
是不可操作的,因为GC对
IntPtr
不做任何操作。无论如何,它只是一个数字。@Charlieface,这样我基本上可以在处理完IntPtr后留下它们?例如,如果我使用返回IntPtr的
GetProcAddress
,我可以使用返回的IntPtr并将其保留?我说的对吗?对,但请添加您的代码以删除否决票
[DllImport(Dll, CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr CreatePart(IntPtr partId);