2

まず、メモリを割り当ててポインターを取得します。

IntPtr pointer = Marshal.AllocHGlobal(size);

次に、ポインターが指すメモリを解放しようとします。

Marshal.FreeHGlobal(pointer);

しかし、私のアプリケーションでは、「メモリフラグメントが破損しています」という説明だけで、致命的な未知の例外が発生することがあります。これは、別のポインターを解放することによって、既に割り当て解除されているメモリ ブロックを指すポインターを解放しようとするためだと思います...

私の質問は: IntPtr ポインターを使用して、メモリ ブロックがまだ割り当てられているか、または既に割り当て解除されているかを確認する方法はありますか?

4

1 に答える 1

0

ポインターを解放する良い方法は Marshal.FreeHGlobal() であるため、割り当てが解除されている場合は論理的な問題ですが、try/catch で実行できるため、catch 例外が発生した場合は既に割り当てが解除されています。

于 2013-06-06T14:00:33.170 に答える