Şimdi Ara

C++ Array Deallocate

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
0
Favori
1.121
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
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
  • 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
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.