Указывает ли этот IntPtr на выделенную неуправляемую память или нет?

Сначала я выделяю память и получаю указатель:

IntPtr pointer = Marshal.AllocHGlobal(size);

Затем я пытаюсь освободить память, указанную моим указателем:

Marshal.FreeHGlobal(pointer);

Но в моем приложении это вызывает иногда фатальное неизвестное исключение только с этим объяснением: "фрагмент памяти был поврежден". Я думаю, это потому, что я пытаюсь освободить указатель, который указывает на блок памяти, уже перемещенный, освобождая другой указатель...

У меня вопрос: используя указатель IntPtr, есть ли способ проверить, выделен ли блок памяти или он уже удален?

1 ответ

Решение

Хороший способ освободить ваш указатель - Marshal.FreeHGlobal(), поэтому, если он смещен, это логическая проблема, но вы можете сделать это в try/catch, так что он уже смещен, если попадете в исключение catch.

Другие вопросы по тегам