- Katılım
- 10 Ocak 2009
- Konular
- 3,748
- Mesajlar
- 15,940
- Çözüm
- 334
- Online süresi
- 6mo 28d
- Reaksiyon Skoru
- 8,034
- Altın Konu
- 947
- Başarım Puanı
- 474
- Yaş
- 34
- MmoLira
- 86,717
- DevLira
- -12
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Heart, bir struct'a pointer olan LPHEART typedef'ini kullanır.
heart_new fonksiyonuna bir göz atalım:
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ış.
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.
heart_new fonksiyonuna bir göz atalım:
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:
- Katılım
- 7 Ağu 2020
- Konular
- 8
- Mesajlar
- 175
- Çözüm
- 3
- Online süresi
- 11d 2h
- Reaksiyon Skoru
- 29
- Altın Konu
- 0
- TM Yaşı
- 5 Yıl 10 Ay 9 Gün
- Başarım Puanı
- 73
- MmoLira
- 1,266
- DevLira
- 0
paylaşım için tşk.
birde p2p açıgı için bi konu yazar mısın böyle detaylı sekilde çözümü ile birlikte
birde p2p açıgı için bi konu yazar mısın böyle detaylı sekilde çözümü ile birlikte
- Katılım
- 10 Ocak 2009
- Konular
- 3,748
- Mesajlar
- 15,940
- Çözüm
- 334
- Online süresi
- 6mo 28d
- Reaksiyon Skoru
- 8,034
- Altın Konu
- 947
- Başarım Puanı
- 474
- Yaş
- 34
- MmoLira
- 86,717
- DevLira
- -12
paylaşım için tşk.
birde p2p açıgı için bi konu yazar mısın böyle detaylı sekilde çözümü ile birlikte
Teşekkürler. Buradan açığı kapatmak için yardım alabilirsin. Tıkla ve Git
Son düzenleme:
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 9
- Görüntüleme
- 1K
- Cevaplar
- 17
- Görüntüleme
- 1K
- Cevaplar
- 10
- Görüntüleme
- 2K
- Cevaplar
- 28
- Görüntüleme
- 6K








