【发布时间】:2014-11-30 10:46:12
【问题描述】:
看到一段代码,不确定是否需要释放内存。如果我在下面有这个块:
IntPtr buf = new IntPtr(logRecord.ToInt32() + logTotalCount *
Marshal.SizeOf(typeof(SomeUnmanagedStruct)));
我需要打电话给Marshal.FreeHGlobal(buf)吗?
根据我有限的理解(以及这个SO),我认为我们不应该调用FreeHGlobal,因为我们不调用Marshal.AllocHGlobal。但是,我也从这个SO 中读到LocalFree 可能需要被调用?
任何建议释放此内存的正确方法是什么(如果我需要做任何事情)?
更新:以防万一有人对 IDISPOSABLE 包装类感兴趣,有一篇很棒的文章 here。
【问题讨论】:
-
没有内存分配,所以没有什么可以释放的。我不清楚你认为你的代码行做什么。你能解释一下它的作用吗?
-
啊哈好吧,我想可能是这样。我从其他人那里收到了这段代码,因此试图找出 buf 的用途,因为它被传递到第 3 方 C++ API 的参数中。
标签: c# marshalling unmanagedresources