Bvural41 1
Bvural41
Fethi Polat 1
Fethi Polat
Mt2Hizmet 1
Mt2Hizmet
Sevdamsın 1
Sevdamsın
Nedved35 1
Nedved35
Hikaye Ekle

[FIX] Heart "libthecore" memory leak nasıl düzeltilir?

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

Heart, bir struct'a pointer olan LPHEART typedef'ini kullanır.
heart_new fonksiyonuna bir göz atalım:

1738574907415.png


Görüldüğü gibi, bu fonksiyon LPHEART için bellek tahsis etmek amacıyla calloc çağrısını kullanıyor. Ancak burada ciddi bir problem var: Bu bellek hiçbir zaman serbest bırakılmıyor!

Peki, bu gerçekten bir hata mı? Belleği temizlemek için bir mekanizma var mı?

Bir dakika… heart_delete adında bir fonksiyonumuz mevcut!
Evet, var ama hiçbir yerde çağrılmamış.

Potansiyel Çözüm​

Manuel olarak heart_delete çağırmak yerine, LPHEART için otomatik bellek yönetimi sağlayan bir smart pointer (akıllı işaretçi) kullanalım.
Bu sayede, bellek doğru zamanda otomatik olarak serbest bırakılacak ve olası bellek sızıntılarını önlemiş olacağız.

libthecore -> heart.h:

[CODE lang="cpp" title="c++"]// Öncelikle raw pointeri shared ile değiştirelim
typedef struct std::shared_ptr<HEART> LPHEART;[/CODE]

libthecore -> heart.cpp:

[CODE lang="cpp" title="c++"]// heart_new fonksiyonundan bu değişkeni silin:
LPHEART ht;

// Bu satırı:
CREATE(ht, HEART, 1);

// Bu şekilde düzenleyin:
auto ht = std::make_shared<HEART>();[/CODE]

Artık heart_delete fonksiyonuna ihtiyacımız olmadığı için bu fonksiyonu silebilirsiniz.
 
Son düzenleme:

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst