c++中的Alloc数组,c#中的free数组

本文关键字:中的 数组 free c++ Alloc | 更新日期: 2023-09-27 18:19:02

我编写了一个使用Dllimport的程序。这对我来说很有趣,如果我需要分配一些内存并将指针返回到c#作为IntPtr,如何释放它?

c++中的Alloc数组,c#中的free数组

IntPtr传递回您的dll,以便它可以为自己释放内存。

首先,不要那样做!你正在破坏托管语言的最大好处之一——你必须自己管理资源。


尽管如此,如果你真的需要这样做,你可以。

首先,本机dll必须提供自己的内存释放函数。然后,使用它!

代码可能是这样的:

static class Program
{
    [DllImport("foo.dll")]
    private static IntPtr myfooalloc();
    [DllImport("foo.dll")]
    private static void myfoofree(IntPtr p);
    static void Main(String[] args)
    {
        IntPtr p = myfooalloc();
        // Do something
        myfoofree(p);
    }
}

或者,更安全的:

IntPtr p = myfooalloc();
try
{
    // Do something
}
finally
{
    myfoofree(p);
}

一般来说,库的设计不需要做这些事情(一端分配,另一端释放)。当然,也有例外,通常情况下,您需要使用操作系统API函数来分配内存。因此,这取决于标准库,因此没有通常的正确答案。