C # Правильное удаление структуры с Char * - PullRequest
0 голосов
/ 09 мая 2018

Я довольно новичок в C # и у меня возникают проблемы с освобождением неуправляемых ресурсов. Для функции CharPtrToString необходимо ли освобождать IntPtr? Кроме того, было бы безопасно вызывать List .clear (), не вызывая утечку памяти?

    public string CharPtrToString(MycharArray chararray)
    {
        IntPtr ipp = (IntPtr)chararray;
        string s = Marshal.PtrToStringAnsi(ipp)
        //need to free Ipp?
        return s;
    }

    public struct MyStruct
    {
          public Int int1;
          public MyCharArray charArray;
    }

    public unsafe struct MyCharArray
    {
          public char* charPointer;
    }

1 Ответ

0 голосов
/ 09 мая 2018

если возможно, при назначении переменной charPointer вы должны попытаться использовать ключевое слово «fixed». это исправляет указатель, поэтому сборка мусора не очищает указатель. Тогда вам также не нужно его отпускать, он будет автоматически освобожден после фиксированного блока. Это зависит как ваш другой код.

https://docs.microsoft.com/en-US/dotnet/csharp/language-reference/keywords/fixed-statement

так бы это выглядело примерно так

 fixed(char* charPointer = ... )
 {
    IntPtr ipp = (IntPtr)charPointer;
    string s = Marshal.PtrToStringAnsi(ipp)
 }
...