ID do artigo: 167929 - Última revisão: terça-feira, 21 de novembro de 2006 - Revisão: 4.1 Vazamentos de memória são relatados quando você usar várias DLLs de MFC
SintomasQuando você depurar um projeto que contém o MFC regulares (USRDLL) DLLs ou ActiveX Controls (OCX), você verá vazamentos de memória semelhante à seguinte relatado no depurador:
a CDynLinkLibrary object at $00410F70, 64 bytes long
a CDynLinkLibrary object at $00410F70, 64 bytes long
{38} client block at 0x00410D80, subtype 0, 64 bytes long.
a CDynLinkLibrary object at $00410D80, 64 bytes long
a CDynLinkLibrary object at $00410D80, 64 bytes long
{36} client block at 0x00410C60, subtype 0, 64 bytes long.
a CDynLinkLibrary object at $00410C60, 64 bytes long
a CDynLinkLibrary object at $00410C60, 64 bytes long
CausaEsses vazamentos de memória são relatados quando várias versões de DLL MFC são carregados no mesmo processo. Como DLLs de extensão (AFXDLL) MFC exigem a mesma DLL de MFC exata como o aplicativo de chamada, esse problema pode ocorrer somente quando usando controles de ActiveX (OCX) que usam a versão compartilhada do MFC ou DLLs do MFC regulares (USRDLL). O caso mais comum é mistura (MFC4xd.DLL) ANSI e UNICODE (MFC4xxUd.DLL) versões do MFC no mesmo processo. Isso também pode ocorrer quando mistura MFC42d.DLL e MFC40d.DLL. ResoluçãoEssas notificações de vazamento de memória são falsos e podem ser ignoradas. Como nenhuma cópia do MFC conhece os outros, não é fácil interromper esses falsos vazamentos de sendo informado. No entanto, é possível separar vazamentos falsos dos possíveis vazamentos reais. Isso pode ser feito substituindo CWinApp::ExitInstance() no EXE e DLL e colocando instruções TRACE() neles: SituaçãoEsse comportamento é por design. Mais InformaçõesConsidere as seguintes aplicativo/DLLs:
------------- --------------
= = = =
= MFC = Calls = MFC =
= APP = ------------> = USRDLL =
= = = =
= = = =
------------- --------------
| |
| |
| Calls | Calls
| |
\/ \/
------------- --------------
= = = =
= = = =
= MFC40d = = MFC40Ud =
= DLL = = DLL =
= = = =
------------- --------------
\ /
\ /
\ Calls / Calls
\ /
\/ \/
-------------
= =
= =
= MSVCR40d =
= (CRT) =
= =
-------------
No entanto, desde o UNICODE (MFC40ud.DLL) e DLLs do MFC ANSI (MFC40d.DLL) usam a mesma DLL CRT, vazamentos de memória falso são relatados em todos os objetos alocados em USRDLL MFC. Isso ocorre porque MFC depende a DLL de CRT para alocar e controlar toda a memória. Ele não separa as alocações de memória de diferentes versões do MFC. Quando uma das DLLs MFC descarrega, ele chama a CRT para fazer um despejo de memória, supondo que tudo deixado no heap é um vazamento de memória. No entanto, essa suposição é incorreta como há dois várias cópias do MFC na memória. (c) 1997 Microsoft Corporation, todos os direitos reservados. Contribuições de Kelly Marie Ward, Microsoft Corporation. A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: 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: 167929
(http://support.microsoft.com/kb/167929/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesTraduções deste artigo |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar para o início