Makale numarası: 151585 - Son Gözden Geçirme: 30 Eylül 2005 Cuma - Gözden geçirme: 3.0

Bir bellek ayırma hatalarını ayıklamak için _crtBreakAlloc nasıl kullanılır

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Özet

Izleme debug C Çalışma Zamanı Modülü (CRT) kullanarak bellek sızdırıyor, sızıntısına neden olan bellek ayrılırken hemen önce bir kesme noktası ayarlamak genellikle yararlıdır. Ayarlayarak ya da en _crtBreakAlloc derleme zamanı veya çalıştırma zamanı, kullanıcı tanımlı bir kesme noktası bellek ayırma belirli bir noktada neden olabilir.

Daha fazla bilgi

Bellek izleme gibi _CrtDumpMemoryLeaks, Debug CRT işlevlerle sızdırıyor genellikle küme ayraçları ({}) içine alınmış olan bir tahsisat numarası görüntülenir. Örneğin, bir bellek sızıntısı 18 tahsisat numaradan şudur:
   Detected memory leaks!
   Dumping objects ->
   {18} normal block at 0x00660BE4, 10 bytes long
   Data: <          > CD CD CD CD CD CD CD CD CD CD
   Object dump complete.
					
Çağrı yığını ' adım ve hangi işlevleri tahsis için bu bellek neden Bkz: ayrılmış bu belleği, önce kesme noktası doğru olarak ayarlamak yararlıdır. Ayırmak için bir tahsisat numarasını belirtmenize olanak verir, Debug CRT işlevi _CrtSetBreakAlloc. Bu yöntem, her tahsisat kesme noktası ayarlamak istediğiniz programınızı yeniden gerektirir. Gözcü penceresini kullanırsınız ve Tahsisat kesme noktası dinamik olarak belirlemek için alternatif bir yöntem var. Bu yöntem, kaynak kodu değişiklikler gerektiren veya recompiling avantajı vardır.

C çalışma zamanı için statik olarak bağlıyorsanız, değiştirmek istediğiniz değişkeni _crtBreakAlloc denir. C çalışma zamanı için dinamik olarak bağlıyorsanız, değişken, değiştirmek istediğiniz Gözcü penceresi {,, msvcr40d.dll} * __p__crtBreakAlloc (Visual C++ 4.0 veya 4.1 kullanıyorsanız). Değiştirmek istediğiniz değişkeni Gözcü penceresi olmalıdır {,, msvcrtd.dll}*__p__crtBreakAlloc(), Visual C++ 4.2 veya sonraki bir sürümünü kullanıyorsanız.

CRT'ın hangi sürümünü, ile derleme olmadığını belirlemek için <a0></a0>:
  1. Yapı) menüsünde Ayarlar'ı seçin.
  2. Ayarlarında: bölmesinde, oluşturduğunuz yapılandırmayı seçin. C/C++ sekmesini seçin ve sonra da Code Generation kategoriyi seçin.
Kullanım iletişim kutusunu çalışma zamanı kitaplığı sürümü, kullanmakta olduğunuz CRT görüntüleme görüntülenmesi gerekir. (Bu ayar boşsa, yalnızca bir yapılandırma ayarları için seçtiğiniz dikkat: bölmesi.)

Tahsisat kesme noktası dinamik olarak belirlemek için aşağıdaki adımları gerçekleştirin:
  1. Bilgisayarınızı hata ayıklama oturumu başlatın. Yapı) menüsünde, Debug Step ınto-> seçin. "Tek akıtılan hata ayıklama" veya "Hata ayıklama Multi-CVE-2006-akıtılan CRT" kullanıyorsanız, bu adımı 1a izleyin. Aksi takdirde, 1b adımında uygulayın.

    1. _CrtBreakAlloc Gözcü penceresi içinde yazın. Bu, programınızı durduracak geçerli tahsisat numarasını gösterir. Programınızı ilk kez açıldığında, bu tahsisat sayı -1 olmalıdır.
    2. Tür {,, msvcr40d.dll}*__p__crtBreakAlloc() Gözcü penceresinde, Visual C++ 4.0 veya 4.1 kullanıyorsanız. Tür {,, msvcrtd.dll}*__p__crtBreakAlloc(), Visual C++ 4.2 veya sonraki bir sürümünü kullanıyorsanız. Bu, programınızı durduracak geçerli tahsisat numarasını gösterir. Programınızı ilk kez açıldığında, bu tahsisat sayı -1 olmalıdır.
  2. -1 Değeri çift tıklatın ve bir kullanıcı tanımlı kesme noktasıyla neden olan yeni bir ayırma numarasını girin.
  3. Hata Ayıkla menüsünden Gönder-> Debug'ı seçin.
_CrtBreakAlloc hakkında daha fazla bilgi için lütfen "İzleme yığın ayırma istekleri" çevrimiçi Yardım konusuna bakın.

Bu makaledeki bilginin uygulandığı durum:
  • The Integrated Debugger, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.1 Aboneliği
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Anahtar Kelimeler: 
kbmt kbbug kbcrt kbdebug kbhowto kbide KB151585 KbMttr
Otomatik TercümeOtomatik 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:151585  (http://support.microsoft.com/kb/151585/en-us/ )