Указывает ли этот IntPtr на выделенную неуправляемую память или нет?
Сначала я выделяю память и получаю указатель:
IntPtr pointer = Marshal.AllocHGlobal(size);
Затем я пытаюсь освободить память, указанную моим указателем:
Marshal.FreeHGlobal(pointer);
Но в моем приложении это вызывает иногда фатальное неизвестное исключение только с этим объяснением: "фрагмент памяти был поврежден". Я думаю, это потому, что я пытаюсь освободить указатель, который указывает на блок памяти, уже перемещенный, освобождая другой указатель...
У меня вопрос: используя указатель IntPtr, есть ли способ проверить, выделен ли блок памяти или он уже удален?
1 ответ
Решение
Хороший способ освободить ваш указатель - Marshal.FreeHGlobal(), поэтому, если он смещен, это логическая проблема, но вы можете сделать это в try/catch, так что он уже смещен, если попадете в исключение catch.