Şimdi Ara

C++ Array Deallocate

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü, 1 Mobil
5 sn
5
Cevap
0
Favori
1.330
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
Öne Çıkar
0 oy
Sayfa: 1
Giriş
Mesaj
  • Tekrar merhaba.

    Elimde 2 adet class var. Biri B biri A olsun.
    B classı oluşturulurken içerisinde A tipinden classların bulunduğu array tutuyor. Bu arrayin boyutu başlangıçta belli olmadığı için new komutu ile alıyorum.
    Destructorları yazdım ve B classına ait destructor içerisinde
    delete [] a; //a= A classına ait arrayin adı
    bir çağrı yaptığım zaman A classına ait eleman sayısı kadar destructor çağrılmıyor. Yani memory leak var ortada.

    İnternetten biraz araştırdıktan sonra for döngüsü içerisinde her eleman için ayrı ayrı manuel destructor çağrısı yapılabileceğini gördüm ancak bunu yaptığımda da runtime error alıyorum. Array'in ilk elemanı siliniyor(cout ile kontrol ettim). İlk elemandan sonrakiler silinemiyor.

    Bu durumu nasıl çözebilirim? Ve runtime hatası almamın sebebi nedir?



    < Bu mesaj bu kişi tarafından değiştirildi :DHoroHoro:D -- 9 Mart 2012; 17:00:07 >



    _____________________________
  • Kodunda mutlaka bir hata vardır. Manuel olarak yok etmeye gerek yok. Ben aşağıdaki kodu denediğimde düzgün çalıştı.

     
    #include <iostream>

    int x;

    class A {
    int d;

    public:
    A() {
    d = ++x;
    std::cout << d << " oluşturuldu\n";
    }

    ~A() {
    std::cout << d << " yok edildi\n";
    }
    };

    class B {
    A *ptr;

    public:
    B(int adet) {
    ptr = new A[adet];
    }

    ~B() {
    delete [] ptr;
    }
    };

    void dene() {
    B b(30);
    }

    int main()
    {
    dene();

    char c;
    std::cin >> c;

    return 0;
    }
  • Hata alman normal değil eğer hala sorunu çözmeye çalışıyorsan kodu yazarsan yardımcı olabilirm
    _____________________________

    Leyla ile Mecnun
  • class destructor, içindeki nesnelerin de destructorlerini çağırır. yani destructor esnasında A'lar zaten siliniyor, sen bir de ekstradan delete ile silmeye çalışıyorsun yani NULL pointer silinemeyeceği için runtime hatası alıyorsun.

    http://www.parashift.com/c++-faq-lite/dtors.html
    _____________________________
  • ups pardon senin silmeye çalıştığın şey pointermış. classın içinde new ile yarattığın her şeyi delete ile manual silmek zorundasın. kodun hata vermemesi lazım
    _____________________________
  • Yapay Zeka’dan İlgili Konular
    preg replace sorunu
    15 yıl önce açıldı
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.