Aracılığıyla paylaş


C28197

Uyarı C28197: Büyük olasılıkla bellek sızıntı

Kaynak takma adlı başka bir konuma olasılığı olduğunda bu uyarı için hem bellek hem de kaynak sızıntılarını bildirilir.

İşaretçi ayrılmış bellek veya başka bir nokta değil açıkça serbest bırakılmış kaynak tahsis edilir.Çağıran işlevin yetersiz ek açıklamalar da bu büyük olasılıkla yapabilmenize rağmen bu uyarı genellikle çağrılan işlev, ek açıklamalar yetersiz olmasından kaynaklanır.

Giriş bir bağımsız değişken varsa, bu uyarı işlev Çıkışta rapor edilebilir bir __drv_freesMem veya __drv_aliasesMem ek açıklama.Bu uyarı genellikle geçerli bir sızıntı gösterir veya bir işlev geçerli işlev tarafından çağrılan ek açıklama gerekiyor.

Özellikle temel yokluğunu _In_ ve _Out_ ek açıklamaları yapmak oldukça büyük bir olasılıkla bu uyarıyı rağmen __drv_aliasesMem ve __drv_freesMem ek açıklamaları gerektiği gibi.Yanlış pozitif bir eksik, büyük olasılıkla bir sonucu olduğu _In_ ek açıklama.

İşaretçi ve diğer işlevler (böylece bir sızıntı önleme), açıklama ile __drv_aliasesMem.Nesne genel yapısına ekler veya, yapan bir sistem işlevine geçirir bir işlevi oluşturursanız, sizin eklemeniz gereken __drv_aliasesMem ek açıklama.

Belleği boşaltmak işlevlerini açıklama ile __drv_freesMem.Bu ek bellek zaten serbest önemli işlevleri vardır.

Örnek

Bu kod, aşağıdaki C# uyarısını oluşturur:

char *p = (char *)malloc(10);
test(p);   // does not save a copy of p

Aşağıdaki kod örneği, bu uyarıyı önler:

char *p = (char *)malloc(10);
test(p);   // does not save a copy of p
free(p);