【发布时间】:2021-01-19 21:43:11
【问题描述】:
我的项目中有很多 IntPtr,其中一些是从我的 dll 返回的,因此我没有使用 Marshal.AllocHGlobal() 为它们分配内存
[DllImport(Dll, CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr CreatePart(IntPtr partId);
我应该如何释放这些从 dll 函数返回的 IntPtrs?
Marshal.FreeHGlobal() 或 variable = IntPtr.Zero 或两者?
我在这个网站和微软文档上阅读了一些问题,他们说Marshal.FreeHGlobal 应该用于任何使用Marshal.AllocHGlobal 分配的内存。
如果我们没有为IntPtr分配内存怎么办
感谢您阅读我的问题。
【问题讨论】:
-
请看stackoverflow.com/help/how-to-ask,这不是一个好问题,主要会吸引各种意见。
-
@SimonPrice 我的问题有什么问题?我想知道我是否必须手动释放它们,否则它们会自动释放
-
没有看到您的代码,无法明确给出建议。但是不,如果您不分配任何内存,您根本不需要这些选项中的任何一个。设置为
Zero是无操作的,因为 GC 对IntPtr没有任何作用,它只是一个数字。 -
@Charlieface 所以我基本上可以在完成后留下我的 IntPtr 吗?例如,如果我使用返回 IntPtr 的
GetProcAddress,我可以使用返回的 IntPtr 并留下它吗?我说的对吗? -
正确,但请edit 并添加您的代码以删除反对票
标签: c# memory-management garbage-collection marshalling intptr