C/C++ Leak ayıklamak için tavsiye

Frk4n

Hectopat
Katılım
29 Kasım 2020
Mesajlar
163
Çözümler
2
Merhaba, C dili ile uğraşıyorum, herkesin malumatı olan leaklerden yakınıyorum. Leakleri daha kolay temizlemek için valgrind haricinde tavsiye edebileceğiniz bir yöntem, kütüphane vs. var mı?
 
Bellek sızıntısı yaşadığın ve çözemediğin örnek bir kodunu paylaşırsan onun üzerinden birkaç öneride bulunabiliriz belki.
 
Bellek sızıntısı yaşadığın ve çözemediğin örnek bir kodunu paylaşırsan onun üzerinden birkaç öneride bulunabiliriz belki.

Proje biraz fazla uzun, çok fazla iç içe fonksiyon var valgrind ile aşama aşama çözüyoruz fakat başka bir yöntem olabilir düşüncesiyle sormak istedim sadece.
 
O halde basit bir öneride bulunayım belki işine yarar, malloc ve free fonksiyonlarını sarmalayan fonksiyonlar yaz, ve bu kendi fonksiyonlarını her kullandığında bir etiketle imzala. Örneğin;

myMalloc(bla bla, "func0001")

myFree(bla bla "func0001")

Bunları da artık static variable ya da bir struct üzerinde tutarsın, program sonunda da print edersin, hangi malloc çağrısında ve nerede bellek serbest bırakılmamış takip edebilirsin.

Tabii bu bir öneri, işin doğrusu projenin iyi dokümante edilmiş olmasıdır.
 
@Frk4n hocam merhaba ben de C dili ile uğraşıyorum da bu leak olayı tam olarak ne oluyor internette biraz araştırdım ve bu yüksek seviye dillerdeki çöp toplama olayı mı oluyor yani bellekteki değişkenlerle ilgili mi?
@bitwise, @Dynamics değerli hocalarım sizler de yardımcı olursanız sevinirim.
 

C ile ilgili her türlü kafana takılan soru için CodeVault, bu soru içinde videoları var dilersen izliyebilirsin.
 
C de bildiğin üzeri bellek yönetimi kullanıcıya bırakılır. Eğer malloc ile bir bellek allocate edip bunu free ile serbest bırakmazsan bellek sızıntısı dediğimiz olay gerçekleşir. Yüksek seviyeli diller bu işi Garbage Collector adı verilen bir yöntemle kendi çapında çözüyor. C++ da ise kendimiz RAII paradigmasını kullanarak birtakım GC işlerini halledebiliyoruz.
 
@Dynamics yani garbage collectorumuzu kendimiz kontrol ediyorum anladığım kadarıyla ve bildiğiniz gibi değişkenler bellekte tutuluyor functionlarda mı orada tutuluyor.
 
@Dynamics yani garbage collectorumuzu kendimiz kontrol ediyorum anladığım kadarıyla ve bildiğiniz gibi değişkenler bellekte tutuluyor functionlarda mı orada tutuluyor.
Programlar diskten okunup belleğe map edilir, yani bir programı çalıştırmak için işletim sistemi bunu belleğe yüklüyor. Program bellek üzerinde kabaca iki bölümden oluşur bunlar stack ve heap'dir. Stack bölümünde fonksiyonlar ve değişkenler tutulur, heap üzerinde ise dinamik bellek tahsisiyle üretilen değişken ve fonksiyonlar tutulur.

örneğin bunlar stack üzerinde tutulur.
int x = 25;
void function(x, y) {

}

bunlar da heap üzerinde tutulur.
struct x {
int x = 25
void function() { bla bla}
}
x * obj = malloc(sizeof(x))
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…