这个IntPtr是否指向已分配的非托管内存

本文关键字:内存 分配 IntPtr 是否 这个 | 更新日期: 2023-09-27 18:17:18

首先,分配内存并获取指针:

IntPtr pointer = Marshal.AllocHGlobal(size);

然后,我尝试释放指针所指向的内存:

Marshal.FreeHGlobal(pointer);

但是在我的应用程序中,它有时会引发一个致命的未知异常,只有这个解释:"内存片段已被损坏"。我猜这是因为我试图通过释放另一个指针来释放指向已经分配的内存块的指针…

我的问题是:使用IntPtr指针,是否有任何方法来检查内存块是否仍被分配或已被取消分配?

这个IntPtr是否指向已分配的非托管内存

释放指针的好方法是Marshal.FreeHGlobal(),所以如果它被取消分配,这是一个逻辑问题,但你可以在try/catch中这样做,所以如果你进入catch异常,它已经被取消分配了