C# 我是否应该释放所有IntPtr';我曾经和FreeHGlobal在一起';我受够了吗?
我的项目中有很多IntPtr,其中一些是从my dll返回的,因此,我没有使用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
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);