Destructor Çağırınca Aldığım Segmentation Fault
-
Sayın müridler, bir class'ım için bir destructor yazdım onu main'de çağırınca segmentation fault alıyorum. Hafızadan aldığım yerleri geri verirken bir sıkıntım olduğunu düşünmüyorum defalarca kontol ettim. gdb ile açtım baktım fonksiyon çalışıyor ilerliyorum bir yerden sonra
Cannot find bounds of current function
diyor bulunduğum fonksiyona da ??() diyor. Daha önce hiç böyle birşeyle karşılaşmadım yardım edebilecek var mı?
Edit: Bu arada elimde test için iki main var. Diğerinde destructor'ı çağırıyorum bitiyor. arkasından işlemlere devam ediyor. Main bitince aynı destructor'ı tekrar çağırıyor :S
Edit2: Ben elimle myObject.~myClass(); diye çağırmıştım böyle bir kullanımı yok mu? -
Hocam kodları görebilirsem belki birşey diyebilirim. Ne dediğini anlamadım
DrKill tarafından 12/Oca/13 22:19 tarihinde düzenlenmiştir -
destructor methodu direk cagirmayacaksin. fonksiyon icinde olisturulan (stack bellekte) yerel siniflar icin yikici method fonksiyon bitiminde otomatik cagrilir. eger heap bolgesinde (new ile olusturdugun nesneler) olusturuyosan nesneyi, delete ile sildigin zaman yine otomatik olarak cagrilir
-
GrN bunu yazdı
destructor methodu direk cagirmayacaksin. fonksiyon icinde olisturulan (stack bellekte) yerel siniflar icin yikici method fonksiyon bitiminde otomatik cagrilir. eger heap bolgesinde (new ile olusturdugun nesneler) olusturuyosan nesneyi, delete ile sildigin zaman yine otomatik olarak cagrilir
anladım hocam zaten ben çağırınca siliyor sorunsuz sonra kendisi tekrar çağırıyor.
-
uLtRaLoVeR bunu yazdı
Sayın müridler, bir class'ım için bir destructor yazdım onu main'de çağırınca segmentation fault alıyorum. Hafızadan aldığım yerleri geri verirken bir sıkıntım olduğunu düşünmüyorum defalarca kontol ettim. gdb ile açtım baktım fonksiyon çalışıyor ilerliyorum bir yerden sonra
Cannot find bounds of current function
diyor bulunduğum fonksiyona da ??() diyor. Daha önce hiç böyle birşeyle karşılaşmadım yardım edebilecek var mı?
Edit: Bu arada elimde test için iki main var. Diğerinde destructor'ı çağırıyorum bitiyor. arkasından işlemlere devam ediyor. Main bitince aynı destructor'ı tekrar çağırıyor :S
Edit2: Ben elimle myObject.~myClass(); diye çağırmıştım böyle bir kullanımı yok mu?myObject.~myClass(); şeklinde manual olarak destructor çağırılmaz çünkü hafızadan obje için aldıgın yeri geri verirken zaten objenin destructor'ı otomatik çağırılır, manual çağırıcaksan ve otomatik çağırılmasını istemiyorsan destructor olarak yazmana gerek yok zaten herhangi bir void metod olarak yaz ya da hiç manual olarak çağırma, sen sadece objeleri yok etme kısmını manual yap destructor otomatik çalışır:)
ama sen manual çağırdığın zaman zaten otomatik olarak destructor tarafından silinmiş ve olmayan şeyleri tekrar silmeye çalışınca doğal olarak hata verir
splintercell tarafından 13/Oca/13 15:08 tarihinde düzenlenmiştir -
Çağrılmaz diye bir kaide yok, Explicit Destructor Call diye bi şey var. Uygulamanın yapısına göre gerektiğinde kullanabilirsin -sorumluluk sende-
Soruna gelince kod, platform, compiler bilgillerini paylaşmazsan bir şey söyleyemeyiz -
Sscheme bunu yazdı
Çağrılmaz diye bir kaide yok, Explicit Destructor Call diye bi şey var. Uygulamanın yapısına göre gerektiğinde kullanabilirsin -sorumluluk sende-
Soruna gelince kod, platform, compiler bilgillerini paylaşmazsan bir şey söyleyemeyizarkadaş hem otomatik çağırılmasını sağlayıp bir de kendi çağırmış ve dedigine göre otomatik çağırılmasını istemiyor o zaman destructor olarak yazmaması gerekiyo. eğer sen destructor'ın özel koşullarda otomatik olarak çağrılmasını engelleyebilme var dersen bişey diyemem o kadar iyi bilmiyorum
splintercell tarafından 13/Oca/13 16:48 tarihinde düzenlenmiştir -
exit() le çıkarsa uygulamadan destructor lar çalışmaz. Onun dışında nesnenin içinde tanımlandığı fonksiyon program execution stack den çıktığında destructorlar otomatik olarak çalıştırılır.