folder Tahribat.com Forumları
linefolder C - C++
linefolder Destructor Çağırınca Aldığım Segmentation Fault



Destructor Çağırınca Aldığım Segmentation Fault

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    uLtRaLoVeR
    uLtRaLoVeR's avatar
    Kayıt Tarihi: 25/Haziran/2007
    Erkek

    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?

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    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

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    guru
    guru's avatar
    Kayıt Tarihi: 30/Mart/2007
    Erkek

    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 


    ..
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    uLtRaLoVeR
    uLtRaLoVeR's avatar
    Kayıt Tarihi: 25/Haziran/2007
    Erkek
    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.

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    splintercell
    splintercell's avatar
    Kayıt Tarihi: 28/Eylül/2008
    Erkek
    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
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Sscheme
    Sscheme's avatar
    Kayıt Tarihi: 04/Mart/2007
    Erkek

    Ç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


    Bütün mesajlarım ve konularım BSD Lisansı"yla lisanslanmıştır.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    splintercell
    splintercell's avatar
    Kayıt Tarihi: 28/Eylül/2008
    Erkek
    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öyleyemeyiz

    arkadaş 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
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Sscheme
    Sscheme's avatar
    Kayıt Tarihi: 04/Mart/2007
    Erkek

    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.


    Bütün mesajlarım ve konularım BSD Lisansı"yla lisanslanmıştır.
Toplam Hit: 850 Toplam Mesaj: 8