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 >
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.
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
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 >