2009-03-09 15 views
4

Bir üçüncü tarafa bağlanan bir MFC projem var dll. Program çıkışında IDE, "Algılanan bellek sızıntılarını" bildirir. ve sızıntıları döker.Bir MFC projesinde yanlış bellek sızıntıları

Bu sızıntılar üçüncü şahıslar dll. Bunların yanlış bir şekilde bildirildiğine eminim. (Hızlı bir Google kontrolü, MFC'nin dosya kapsamındaki değişkenleri yok etmesinden önce MFC'nin bellek sızıntılarını kontrol ettiğini belirtir.)

Bellek sızıntısı denetimini devre dışı bırakmanın bir yolu var mı, sadece bu dll? yanıta yanıt

ben API kötüye sanmıyorum şimdiye kadar

yayınlanmıştır. Sanıyorum davranış yeni bir çözüm oluşturma VS2005

  • Kullanılması basit proje

    1. ile çoğaltılabilir. , Dll projede
    2. işlev vermek: (. MFC uygulaması)
    3. yeni bir proje (DLL, İhracat Semboller Windows 32 Proje, Uygulama Türü) oluşturma Yeni bir proje oluşturun. İşte

    aşağıdaki dll projesinde kod

    class foo 
    { 
        public: 
         foo(void) { p = new int; }; 
         ~foo(void) { delete p; } 
        private: 
         int* p; 
    }; 
    

    olduğu gibi dll projede

  • , sınıf Foo tanımlamak, sınıf foo bir örneğini oluşturmak, dosya seviyesinde kapsamlı. MFC projesinde
    foo g_foo; 
    
    // This is an example of an exported function. 
    TEMPDLL_API int exportedFunction(void) 
    { 
        return 42; 
    } 
    

    , p silinmiş olsa bile, bellek sızıntısı rapor edecektir kütüphaneye bağlantı ve uygulamayı çalıştırma InitInstance()

    ihraç işlevini çağırdığınızda yıkıcı için g_foo denir.

  • cevap

    6

    Ne istediğimi buldum.

    • Proje özelliği iletişim kutularında, Bağlayıcı | Girdi
    • Gecikmeli Yüklenen DLL olarak dll'yi belirtin.

    Bunu yaptıktan sonra, Visual Studio artık herhangi bir bellek sızıntısı bildirmedi.

    +0

    Lütfen bunun için iyi cevap olarak seçin. – INS

    +0

    Bu, ** iyi bir cevap değil. Sorunun ne anlama geldiğini veya bu cevabın buna nasıl cevap verdiğini bile açıklamıyor. Bunu kullanıyorsanız, yanlış pozitiflerin geri dönüşüne hazırlıklı olun. – IInspectable

    5

    Bu sızıntılar meşrudur. DLL özel temizleme işlevlerini aramaları kaçırmadığınızdan emin olmak için DLL belgelerini iki kez kontrol ediyorum.

    +0

    Hayır, değiller. Onlar **, yanlışlık nedenlerine bağlı olarak, (hangi şekilde) kontrol edemediğinizin gerçekte yarattığı ** yanlış pozitiflerdir. – IInspectable

    İlgili konular