Erro: Vazamentos de memória quando você usa as versões de classe CWnd do método GetDC e o método ReleaseDC

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 819635
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Quando você executar o código que chama a função CWnd::GetDC seguida pela função CWnd::ReleaseDC , ocorre um vazamento de memória de 4 bytes.
Causa
A causa esse erro é desconhecida no momento.
Resolução
Para evitar esse problema, não use as versões de classe CWnd do método GetDC e o método ReleaseDC . Use a função GetDC e a função ReleaseDC .
Situação
A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo.
Mais Informações

Passos para reproduzir o problema

Em um método que faz parte de uma classe é derivada de CWnd , insira o código a seguir em seu aplicativo:
CDC *pDC;    RECT rect;    GetClientRect (&rect);    for (int i = 0; i < 1000; i++)    {        pDC = GetDC ();        ReleaseDC (pDC);  }
se você executa esse código e, em seguida, verifique a memória do sistema antes e depois de executar o código, você perceberá que a memória do sistema vazamentos de quatro bytes por iteração. Se você alterar o código para o código a seguir, o vazamento de memória não ocorre:
HDC hDC;       RECT rect;    ::GetClientRect (m_hWnd, &rect);    for (int i = 0; i < 1000; i++)    {        hDC = ::GetDC (m_hWnd);        ::DrawText (hDC, L"Testing...", 10, &rect, DT_CENTER);        ::ReleaseDC (m_hWnd, hDC);    }  

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 819635 - Última Revisão: 12/08/2015 02:38:02 - Revisão: 1.1

Microsoft eMbedded Visual C++ 4.0

  • kbnosurvey kbarchive kbmt kbpending kbbug KB819635 KbMtpt
Comentários
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)