Makale numarası: 167929 - Son Gözden Geçirme: 21 Kasım 2006 Salı - Gözden geçirme: 4.1 Birden çok MFC dll kullandığınızda bellek sızıntıları bildirilir
BelirtilerMFC normal (USRDLL) dll veya ActiveX denetimi (OCX) içeren bir proje hata, hata ayıklayıcıda bildirilen bellek sızdırıyor aşağıdakine benzer görebilirsiniz:
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
NedenAynı işlem içinde birden çok sürümü MFC DLL'nin yüklendiğinde, bu bellek sızıntıları raporlanır. MFC (AFXDLL) uzantısı DLL arama uygulaması tam olarak aynı MFC DLL gerekir çünkü yalnızca MFC normal (USRDLL) dll veya ActiveX denetimi (MFC paylaştırılmış bir sürümünü kullanan OCX) Bu sorun oluşabilir. En yaygın durum <a1>ANSI</a1> (MFC4xd.DLL) ve MFC <a1>UNICODE</a1> (MFC4xxUd.DLL) sürümleri aynı işlemde karıştırma olur. Bu da MFC42d.DLL ve MFC40d.DLL oluşabilir. ÇözümBu bellek sızıntısı bildirimleri yanlış; sayılabilir. Diğer sürücüler hakkında her iki kopyası MFC biliyor olduğundan, bu yanlış sızıntılarını, rapor gelen durdurmak kolay değildir. Ancak, yanlış sızıntıları gerçek bir olası sızıntıları ayırmak mümkündür. Bu CWinApp::ExitInstance() EXE ve DLL geçersiz kılma ve TRACE() ifadeleri bunları yerleştirme yapılabilir: DurumBu davranış tasarım yüzündendir. Daha fazla bilgiAşağıdaki uygulama/dll göz önünde bulundurun:
------------- --------------
= = = =
= MFC = Calls = MFC =
= APP = ------------> = USRDLL =
= = = =
= = = =
------------- --------------
| |
| |
| Calls | Calls
| |
\/ \/
------------- --------------
= = = =
= = = =
= MFC40d = = MFC40Ud =
= DLL = = DLL =
= = = =
------------- --------------
\ /
\ /
\ Calls / Calls
\ /
\/ \/
-------------
= =
= =
= MSVCR40d =
= (CRT) =
= =
-------------
Ancak <a1>UNICODE</a1> (MFC40ud.DLL) ve <a1>ANSI</a1> (MFC40d.DLL) MFC dll itibaren her ikisi de aynı CRT DLL kullanır yanlış bir bellek sızıntısı MFC USRDLL tahsis edilen tüm nesnelerin raporlanır. Bu, MFC ayırmak ve tüm belleğe izlemek için CRT DLL olduğundan oluşur. Bunu MFC farklı sürümlerindeki bellek ayırmalarını ayrı değil. MFC dll herhangi birini kaldırır, bağlı olan her şeyi yığın içinde kalan bir bellek sızıntısı olduğu varsayılarak, bir bellek dökümü yapmak için bu CRT çağırır. Var olduğundan iki ancak bu varsayımı geçersiz MFC bellek içinde birden çok kopyası. (c) 1997 Microsoft Corporation, tüm hakları saklıdır. Katkıyı Kelly Başak Ward, Microsoft Corporation. Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir. Makalenin İngilizcesi aşağıdaki gibidir:167929
(http://support.microsoft.com/kb/167929/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukMakale çevirileri |






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


Üste