Marshal.FreeHGlobal(IntPtr) 메서드

정의

프로세스의 관리되지 않는 메모리에서 이전에 할당한 메모리를 해제합니다.Frees memory previously allocated from the unmanaged memory of the process.

public:
 static void FreeHGlobal(IntPtr hglobal);
public static void FreeHGlobal (IntPtr hglobal);
[System.Security.SecurityCritical]
public static void FreeHGlobal (IntPtr hglobal);
static member FreeHGlobal : nativeint -> unit
[<System.Security.SecurityCritical>]
static member FreeHGlobal : nativeint -> unit
Public Shared Sub FreeHGlobal (hglobal As IntPtr)

매개 변수

hglobal
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);
Marshal::FreeHGlobal(hglobal);
// Demonstrate how to call GlobalAlloc and
// GlobalFree using the Marshal class.
IntPtr hglobal = Marshal.AllocHGlobal(100);
Marshal.FreeHGlobal(hglobal);
' Demonstrate how to call GlobalAlloc and 
' GlobalFree using the Marshal class.
Dim hglobal As IntPtr = Marshal.AllocHGlobal(100)
Marshal.FreeHGlobal(hglobal)

다음 예제에서는 관리 되는 클래스의 내용을 관리 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.
    Marshal::FreeHGlobal(IntPtr(stringPointer));

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

class MainFunction
{
    static void Main()
    {
    Console.WriteLine("\nStringToGlobalAnsi\n");

    // 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.
    Marshal.FreeHGlobal(stringPointer);

    // 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를 사용 하 여 AllocHGlobal , ReAllocHGlobal 또는 해당 하는 관리 되지 않는 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 는에서 가리키는 메모리를 더 이상 사용할 수 없도록 모든 바이트를 해제 하는 Kernel32.DLL LocalFree 함수를 노출 합니다 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.

외에도 FreeHGlobal 클래스는 Marshal 두 개의 다른 메모리 할당 취소 API 메서드인 및를 DestroyStructure 제공 FreeCoTaskMem 합니다.In addition to FreeHGlobal, the Marshal class provides two other memory-deallocation API methods: DestroyStructure and FreeCoTaskMem.

적용 대상

추가 정보