次の方法で共有


警告 C6335

プロセス情報ハンドル 'handlename' のリーク

解説

この警告は、CreateProcess ファミリの関数によって返されるプロセス情報ハンドルを CloseHandle を使用して閉じる必要があることを示します。 そうしない場合、ハンドル リークが発生します。

コード分析名: LEAKING_PROCESS_HANDLE

この警告が発生するコード例を次に示します。

#include <windows.h>
#include <stdio.h>

void f( )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    // Start the child process.
    if( !CreateProcess( "C:\\WINDOWS\\system32\\calc.exe",
                        NULL,
                        NULL,
                        NULL,
                        FALSE,
                        0,
                        NULL,
                        NULL,
                        &si,    // Pointer to STARTUPINFO structure.
                        &pi ) ) // Pointer to PROCESS_INFORMATION
  {
    puts("Error");
    return;
  }
  // Wait until child process exits.
  WaitForSingleObject( pi.hProcess, INFINITE );
  CloseHandle( pi.hProcess );
}

この警告を解決するには、次のコードに示すように CloseHandle (pi.``hThread) を呼び出してスレッド ハンドルを閉じます。

#include <windows.h>
#include <stdio.h>

void f( )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    // Start the child process.
    if( !CreateProcess( "C:\\WINDOWS\\system32\\calc.exe",
                        NULL,
                        NULL,
                        NULL,
                        FALSE,
                        0,
                        NULL,
                        NULL,
                        &si,    // Pointer to STARTUPINFO structure.
                        &pi ) ) // Pointer to PROCESS_INFORMATION
    {
      puts("Error");
      return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

詳細については、「CreateProcess 関数」と「CloseHandle 関数」をご覧ください。