- Mesaj
- 1.492
- Çözümler
- 55
- Beğeni
- 2.502
- Puan
- 1.839
- Ticaret Puanı
- 0
Fix sahibi metin2.dev'den
Fixi aldığım asıl konu:
Sorun:
Heart, bir struct'a pointer olan LPHEART typedef'ini kullanır.
heart_new fonksiyonuna bir göz atalım:
Görüldüğü üzere, bu fonksiyon LPHEART'a bellek ayırmak için calloc çağırır.
Ancak bu operasyon bir sorun yaratır, calloc asla bellekten salınmaz!
Bir dakika... Belleği salmamız için bizim heart_delete adında fonksiyonumuz var...
Ever var, ancak hiçbir yerde kullanılmamış.
Potansiyel çözüm:
heart_delete çağırmak yerine, LPHEART'a bellek ayırmak için otomatik olarak bellekten salınacak bir smart pointer kullanalım.
libthecore -> heart.h:
libthecore -> heart.cpp:
Artık heart_delete fonksiyonuna ihtiyacımız olmadığı için bu fonksiyonu silebilirsiniz.
Linkleri görebilmek için
giriş yap veya kayıt ol.
'dir.Fixi aldığım asıl konu:
Linkleri görebilmek için
giriş yap veya kayıt ol.
Sorun:
Heart, bir struct'a pointer olan LPHEART typedef'ini kullanır.
heart_new fonksiyonuna bir göz atalım:
Görüldüğü üzere, bu fonksiyon LPHEART'a bellek ayırmak için calloc çağırır.
Ancak bu operasyon bir sorun yaratır, calloc asla bellekten salınmaz!
Bir dakika... Belleği salmamız için bizim heart_delete adında fonksiyonumuz var...
Ever var, ancak hiçbir yerde kullanılmamış.
Potansiyel çözüm:
heart_delete çağırmak yerine, LPHEART'a bellek ayırmak için otomatik olarak bellekten salınacak bir smart pointer kullanalım.
libthecore -> heart.h:
C++:
// Öncelikle raw pointeri shared ile değiştirelim
typedef struct std::shared_ptr<HEART> LPHEART;
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>();
Artık heart_delete fonksiyonuna ihtiyacımız olmadığı için bu fonksiyonu silebilirsiniz.
Çok yerinde bir düzenleme, eski haliyle kullanılsa memory leak, free ile salınsa çift serbest bırakma gibi bir duruma sebebiyet verme ihtimali var, shared_pointer gibi bir özellik varken bunu kullanmak lazım, aslında kodda buna benzer pek çok yer var, çoğunda buna benzer düzenlemeler yapılabilir, bundan örnek alıp kendiniz de bir araştırın derim, paylaşım için teşekkürler.