Artigo: 167929 - Última revisão: terça-feira, 21 de Novembro de 2006 - Revisão: 4.1 Fugas de memória são comunicadas quando utiliza várias DLLs de MFC
SintomasQuando depura um projecto que contém MFC normal (USRDLL) dll ou controlos ActiveX (OCX), poderá ver fugas de memória semelhante à seguinte 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
CausaEstes fugas de memória são comunicadas quando múltiplas versões da DLL MFC são carregados no mesmo processo. Uma vez que as DLL de extensão (AFXDLL) MFC requer a DLL de MFC mesmo exactamente como a aplicação de chamada, este problema só pode ocorrer quando utilizar MFC normal (USRDLL) dll ou controlos ActiveX (OCX) que utilizam a versão do MFC partilhada. O caso mais comum é mistura ANSI (MFC4xd.DLL) e UNICODE (MFC4xxUd.DLL) versões do MFC no mesmo processo. Também pode ocorrer quando a mistura MFC42d.DLL MFC40d.DLL. ResoluçãoEstas notificações de fuga de memória são falsas e podem ser ignoradas. Uma vez que nenhuma cópia do MFC conhece outros diferentes, é não fácil parar estes falsas fugas de que está a ser comunicado. No entanto, é possível separar fugas falsas de fugas de VERDADEIRO potenciais. Pode fazê-lo substituir CWinApp::ExitInstance() na EXE e DLL e colocando TRACE() instruções os: Ponto Da SituaçãoEste comportamento ocorre por predefinição. Mais InformaçãoConsidere as seguintes aplicações/DLLs:
------------- --------------
= = = =
= MFC = Calls = MFC =
= APP = ------------> = USRDLL =
= = = =
= = = =
------------- --------------
| |
| |
| Calls | Calls
| |
\/ \/
------------- --------------
= = = =
= = = =
= MFC40d = = MFC40Ud =
= DLL = = DLL =
= = = =
------------- --------------
\ /
\ /
\ Calls / Calls
\ /
\/ \/
-------------
= =
= =
= MSVCR40d =
= (CRT) =
= =
-------------
No entanto, desde o UNICODE (MFC40ud.DLL) e DLL de MFC ANSI (MFC40d.DLL) utilizam a mesma DLL CRT, fugas de memória FALSO são reportadas em todos os objectos atribuídos em USRDLL MFC. Isto ocorre porque o MFC depende da DLL de CRT para atribuir e controlar toda a memória. -Não separe as atribuições de memória a partir das diferentes versões do MFC. Quando uma das DLLs MFC descarrega, chama CRT para efectuar uma cópia de memória, assumindo que está tudo deixada na pilha de uma fuga de memória. No entanto, este pressuposto está incorrecto uma vez que existem dois várias cópias do MFC na memória. (c) 1997 Microsoft Corporation, todos os direitos reservados. Contribuições de Joana Maria 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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 de Artigos |






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


Voltar ao topo