Распределение и разделение памяти в неуправляемом коде с помощью платформы Invoke (C#)

Я хочу выделить и распределить память в неуправляемом коде (C++), а мы вызываем их функции из управляемого кода (C#). Не уверен, что следующий код работает без утечек памяти или нет?

C# код:

[DllImport("SampleDLL.dll")]
public extern void getString([MarshalAs(UnmanagedType.LPStr)] out String strbuilder);

[DllImport("SampleDLL.dll")]
public extern void freeMemory([MarshalAs(UnmanagedType.LPStr)] out String strBuilder);

....

//call to unmanaged code
getString(out str);
Console.WriteLine(str);
freeMemory(out str);

C++ код:

extern void _cdecl getString(char **str)
{
    *str = new char[20];
    std::string temp = "Hello world";
    strncpy(*str,temp.c_str(),temp.length()+1);
}

extern void _cdecl freeMemory(char **str)
{
    if(*str)
        delete []*str;
    *str=NULL;
}
6
задан svick 3 September 2011 в 15:48
поделиться