Marshal.FreeHGlobal(IntPtr) Marshal.FreeHGlobal(IntPtr) Marshal.FreeHGlobal(IntPtr) Marshal.FreeHGlobal(IntPtr) Method


以前にプロセスのアンマネージ メモリから割り当てられたメモリを解放します。 Frees memory previously allocated from the unmanaged memory of the process.

 static void FreeHGlobal(IntPtr hglobal);
public static void FreeHGlobal (IntPtr hglobal);
static member FreeHGlobal : nativeint -> unit
Public Shared Sub FreeHGlobal (hglobal As IntPtr)
IntPtr IntPtr IntPtr IntPtr

AllocHGlobal(IntPtr) への元の一致する呼び出しによって返されたハンドル。 The handle returned by the original matching call to AllocHGlobal(IntPtr).

次の例では、FreeHGlobal メソッドを呼び出す方法を示しています。The following example demonstrates calling the FreeHGlobal method. このコード例が示されている例の一部、Marshalクラス。This code example is part of a larger example provided for the Marshal class.

// Demonstrate how to call GlobalAlloc and 
// GlobalFree using the Marshal class.
IntPtr hglobal = Marshal::AllocHGlobal(100);
// Demonstrate how to call GlobalAlloc and 
// GlobalFree using the Marshal class.
IntPtr hglobal = Marshal.AllocHGlobal(100);
' Demonstrate how to call GlobalAlloc and 
' GlobalFree using the Marshal class.
Dim hglobal As IntPtr = Marshal.AllocHGlobal(100)

次の例は、管理対象の内容を変換する方法を示しますStringをアンマネージ メモリのクラスし、し、完了時に、アンマネージ メモリを破棄します。The following example demonstrates how to convert the contents of a managed String class to unmanaged memory and then dispose of the unmanaged memory when done.

using namespace System;
using namespace System::Runtime::InteropServices;

#include <iostream>                                                 // for printf

int main()
    // Create a managed string.
    String^ managedString = "Hello unmanaged world (from the managed world).";

    // Marshal the managed string to unmanaged memory.
    char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(managedString ).ToPointer();

    printf("stringPointer = %s\n", stringPointer);

    // Always free the unmanaged string.

    return 0;
using System;
using System.Runtime.InteropServices;

class MainFunction
    static void Main()

    // Create a managed string.
    String  managedString = "I am a managed String";
    Console.WriteLine("1) managedString = " + managedString );

    // Marshal the managed string to unmanaged memory.
    IntPtr stringPointer = (IntPtr)Marshal.StringToHGlobalAnsi(managedString);
    Console.WriteLine("2) stringPointer = {0}", stringPointer );

    // Get the string back from unmanaged memory
    String RetrievedString = Marshal.PtrToStringAnsi( stringPointer);
    Console.WriteLine("3) Retrieved from unmanaged memory = " + RetrievedString );

    // Always free the unmanaged string.

    // IntPtr handle value is still the same:
    Console.WriteLine("4) stringPointer = " + stringPointer );

    // However, it contains no data after being freed:
    String RetrievedString2 = Marshal.PtrToStringAnsi( stringPointer);
    Console.WriteLine("5) RetrievedString2 = " + RetrievedString2 );


使用することができますFreeHGlobalによって割り当てられたグローバル ヒープからメモリを解放するAllocHGlobalReAllocHGlobal、または任意のと同等のアンマネージ API メソッド。You can use FreeHGlobal to free any memory from the global heap allocated by AllocHGlobal, ReAllocHGlobal, or any equivalent unmanaged API method. 場合、hglobalパラメーターがIntPtr.Zeroメソッドは何も行いません。If the hglobal parameter is IntPtr.Zero the method does nothing.

FreeHGlobal 公開、 LocalFreeによって示されるメモリは使用できなくするために、すべてのバイトを解放するには、Kernel32.DLL から関数hglobalします。FreeHGlobal exposes the LocalFree function from Kernel32.DLL, which frees all bytes so that you can no longer use the memory pointed to by hglobal.

ほかにFreeHGlobalMarshalクラスは他の 2 つのメモリの解放の API メソッドを提供します。DestroyStructureFreeCoTaskMemします。In addition to FreeHGlobal, the Marshal class provides two other memory-deallocation API methods: DestroyStructure and FreeCoTaskMem.


直前の呼び出し元に対する完全な信頼が必要です。 requires full trust for the immediate caller. このメンバーは、部分的に信頼されたまたは透過的なコードで使用することはできません。 This member cannot be used by partially trusted or transparent code.