C ++中的Alloc数组和C#中的免费

时间:2014-08-22 10:41:10

标签: c# c++ dllimport

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

3 个答案:

答案 0 :(得分:3)

IntPtr传递回你的dll,这样就可以释放内存。

答案 1 :(得分:2)

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


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

首先,本机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);
}

答案 2 :(得分:0)

一般而言,图书馆的设计应使您不需要做这些事情(一端分配,另一端免费)。但当然也有例外,因此您通常需要使用OS API函数来分配内存。那么,这取决于库,所以通常没有正确答案。

因此,除非另有说明,否则不需要这样做。