Düzeltme: birden çok kez bellek boşaltma bir uygulama hatası Visual C++ neden olabilir

Makale çevirileri Makale çevirileri
Makale numarası: 194550 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Birden çok kez serbest bellek, bir uygulama hatası neden olabilir.

Not: Bu malloc ve birden çok boş ya da yeni kullanıp true olduğunda ve birden çok silme.

Neden

Öbek denetim yapıları free() ve artık burada free() sonraki ça?r?lar çalışır durumda ilk çağrısının düzeltilir.

Çözüm

Birden çok ücretsiz arama önlemek veya aynı işaretçiyi üzerinde birden çok silme. Bunu önlemek için bir işaretçi boş çağrıldıktan sonra boş veya silmek için atayarak yoludur. Sil ve boş bir işlev bağımsız değişken olarak geçirilen işaretçi null ise herhangi bir şey yapmadan döndürür. Bu durumda boş yeri çalışmıyor veya silme için aynı bellek konumunu gösteren birden çok işaretçisi üzerinde denir.

Microsoft, üçüncü taraf uygulamalarını'da bu sorunla karşılaşan müşterilere yardımcı olmak için <a0></a0>, yeni C çalışma zamanı kitaplığı DLL, iki öbek yöneticileri, Visual C++ 5 uyumlu yığın yöneticisinin ve Visual C++ 6 uyumlu yığın yöneticisinin uygulayan Msvcrt.dll yayımladı. Algıladığı uygulamanız hangi Visual C++ sürüm yerleşik olarak bulunur ve bu uygulama için uygun öbek yöneticisini kullanır. Bu sürüm 6.0 veya daha büyük, Visual C++ 6 uyumlu yığın yöneticisinin kullanılır ve bu sürümünden daha eski ise, 6.0, Visual C++ 5 uyumlu öbek kullanılır.

Visual Studio 6.0 kullanıcıları, bu yeni msvcrt.dll en son Microsoft Visual Studio hizmet paketi yükleyerek edinebilirsiniz. Non-Visual Studio kullanıcıların Microsoft kitaplıkları yüklemeniz gerekir.

Durum

Microsoft, Microsoft bir hata olduğunu onaylamıştır bu makalenin başında listelenen ürünlerden.
Bu hata, Visual Studio 6.0 Service Pack 3'te giderilmiştir. Visual Studio hizmet paketleri hakkında daha fazla bilgi için lütfen aşağıdaki Microsoft Knowledge Base'deki makaleleri bakın:

194022Visual Studio 6.0 hizmet paketleri, ne, nerede, neden (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir.)

194295Visual Studio hizmet paketinin yüklü olmadığını belirleme

Daha fazla bilgi

Birden çok kez bellek boşaltma tanımsız davranış oluşturur.

Visual C++ 6.0 ile oluşturulmuş bir uygulama hatası nedeni aşağıdaki örnek kod, yayım oluşturur; kod, Visual C++ 5.0 ile oluşturulan bir uygulama hatası neden olmaz.

Hata ayıklama ya da Visual C++ ile yapılarında bir ASSERT 6.0 veya Visual C++ 5.0 sorun:
   Debug Assertion Failed!
				

Dikkat önemlidir küçük blok öbek durumu (SBH), sürekli flux olduğu. Bu nedenle, hata ayıklama yap? içinde hiçbir belirtilme verilmiş, ancak sürüm oluşturma bir uygulama hatası oluşur nerede durumlar vardır.

Visual C++ 6.0 sürümü yapılarında Visual C++ 5.0 içinde birden fazla bellek boşaltmak için daha duyarlıdır. Visual C++ 5.0 ile oluşturulan, aşağıdaki bir boşaltmak için hatalı çağrı innocuous olduğu durumdur. Özgün daha uzak free() çağrısı yapıldı, bir uygulama hatası neden olabilir. Yüksek olasılık vardır, belleğin bozuk.

Örnek kod

   // Compile options for Release builds /c
   // Compile options for Debug builds /c /Zi
   #include <malloc.h>
   int main(int argc, char* argv[])
   {
      char *pChar1 = (char *)malloc(10*sizeof(char));
      char *pChar2 = (char *)malloc(10*sizeof(char));
      free(pChar1);
      free(pChar1);
      return 0;
   }
				

Özellikler

Makale numarası: 194550 - Last Review: 4 Haziran 2005 Cumartesi - Gözden geçirme: 3.0
Bu makaledeki bilginin uygulandığı durum:
  • 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 kberrmsg kbqfe kbbug kbcode kbcrt kbfix kbvs600sp2fix kbvs600sp3fix KB194550 KbMttr
Machine-translated Article
Ö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:194550

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com