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

Ö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
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;   }				
Msvcrt.dll kbVS600sp2

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 194550 - Son İnceleme: 06/04/2005 20:14:16 - Düzeltme: 3.0

Microsoft Visual C++ 6.0 Enterprise Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual C++, 32-bit Learning Edition 6.0

  • kbmt kberrmsg kbqfe kbbug kbcode kbcrt kbfix kbvs600sp2fix kbvs600sp3fix KB194550 KbMttr
Geri bildirim