SORU
27 Ocak 2012, Cuma


Bellek sızıntısı C

Ben sadece bazı dize manipülasyon yapan C kodu yazdım ama valgrind ezdiğim zaman, bazı olası bellek sızıntısı gösterir. Taneli seviyeye kodunu basit bir C programı gibi bakıyor yazdım hata ayıklama:

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
        std::string myname("Is there any leaks");
        exit(0);
}

ve çalıştırdım bitti valgrind:

==20943== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 26 from 1)
==20943== malloc/free: in use at exit: 360,645 bytes in 12,854 blocks.
==20943== malloc/free: 65,451 allocs, 52,597 frees, 2,186,968 bytes allocated.
==20943== For counts of detected errors, rerun with: -v
==20943== searching for pointers to 12,854 not-freed blocks.
==20943== checked 424,628 bytes.
==20943== 
==20943== LEAK SUMMARY:
==20943==    definitely lost: 0 bytes in 0 blocks.
==20943==      possibly lost: 917 bytes in 6 blocks.
==20943==    still reachable: 359,728 bytes in 12,848 blocks.
==20943==         suppressed: 0 bytes in 0 blocks.
==20943== Reachable blocks (those to which a pointer was found) are not shown.
==20943== To see them, rerun with: --show-reachable=yes

Zorla orijinal C Şifremi de yaptım) çıkıldı var, Bana öyle geldi o zaman. Şimdi sorun önceki eski kod yeni kodu çıkış durumu bekler gibi programdan çıkmak istiyorum. E için.g bir ikili.çıkış b çıkış durumunu bekler.dışarı. Bellek sızıntısı önlemek için herhangi bir yolu var mı, ya da gerçekten program zaten bu noktada çıkıyor gibi bellek sızıntıları endişe edeyim.

Bu da benim için başka bir soruyu, böyle bir kod zararlı mı?

#include<stdio.h>
#include<cstdlib>
int main()
{
        char *p=(char *)malloc(sizeof(char)*1000);
        exit(0);
}

CEVAP
27 Ocak 2012, Cuma


Eğerısrar ediyorlarexit() kullanarak:

#include<iostream>
int main(){
    {
        std::string myname("Are there any leaks?");
    }
    exit(0);
}

main dönüşünde de, döndürülen değer uygulama çıkış kodu olur. Eğer bir çıkış kodu geçirmek istiyorsanız, exit yerine main() 10 *kullanın.

Bu kısmı ile ilgili:

Bu da benim için başka bir soruyu, böyle bir kod zararlı mı?

Bir Evet, çünküKÖTÜprogramlama alışkanlık.

OS serbest bırakmak için başarısız oldu herhangi bir bellek temizler, tüm sistem bellek ve sayfa dosyası yemek için yönetilen değil gibi sürece, işletim sistemi zarar vermemelisin.

Ancak, özensiz/sızdıran kod yazma senin pisliğini temizlemek için OS güvenmek kötü bir fikir olduğunu, bu alışkanlık haline gelebilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ampisound

    Ampisound

    12 Kasım 2006
  • huyked

    huyked

    28 Mart 2008
  • Major FX

    Major FX

    6 HAZİRAN 2012