Merhaba.
Düzeltme demeyeyim de önce bir durum tespiti ile bu veri ışığında konuşayım. Yoksa işletme sahibi zaten geri alıyorsa neden MemoryLeak konuşuyoruz sorusu devreye giriyor.
Ayrıca başlığı okuyanlar anlatmak istediğim konulara odaklansın, fahiş hatalar dışında cümle içinden cımbızla çekip yorum yapmaktan itina edelim. Başka forum başlıklarında örneklerini gördüm üzmeyin beni.
Burada yazacaklarımın altyapısı derya deniz. Yani Windows şunu şöyle yapıyor derken makro seviyede anlatıyorum.
(1) Delphi dili tarafında delphi paketinde bulunan yapı; bir VCL veya CLASS create ederek oluşturduk ve nihayetinde free ettiğinde Delphi aslında DESTRUCTOR kısmında ( genele yayarak bahsediyorum, istisnalar dışında ) bir free ve nil mekanizması otomatikman yer alır.
Yani programdan çıktığında işyeri sahibi değil de
müşterinin kahyası diyelim aslında bir nevi Delphi bunu yapıyor. Ancak nasıl sonlandırıldığı önemli. Close (takip eden işlemler) Terminate(process) vb.
(2) Bir de yazılımcının olası tercihi Halt komutu ile sonlandırıldığını düşünün
kaynakların iadesinin garantisi yoktur.
Şimdi bu bilgi ışığında zaten işletme sahibi kendisi geri alıyor garantimiz olsaydı, neyi nasıl geri alacak sorusu karşımıza çıkıyor. ( Müşteri :
ŞEKERİM DÜŞTÜ. Direkt beni acile götürün dedi ve çıktı

)
Dolayısıyla eğer işletme sahibini bunu hakkıyla yapabiliyor olsaydı bugün Memory Leak konuşuyor olmazdık.
(*) İade dedik ya onun üzerinden konuşalım; Memory Leak sorunu için programın kapanmasına da gerek yoktur. Program çalışırken de rezerve ettiğin alan şişebilmektedir.
- Yani her create ettiğin nesne bir alan alacak, free / nil konuları konuşuldu daha önce, bu şekilde de bu alan iade edilecektir. Ama sen 1000 kayıtlı bir işlemde
döngü içerisinde bir CREATE Class yapar ama
döngüden çıkınca FREE yaparsan elinde 1000 - 1 = 999 tane daha alanı bu yanlış kurgudan dolayı hafızada bırakırsın.
Programdan çıkılmadığı sürece de bu durum sistem kararsızlaşıncaya kadar sürecektir. Yani sadece programdan geriye kalan kalıntı rezerve alan değil, çalışma esnasında da bu kalıntı şişebilir.
(*) Class/VCL Create edilirken
:= Create(nil)'ler kullanılıyorsa
owneri olmayan sınıf ile ne yapsın garip kahyamız delphi.
(*) Programda çok fazla pointer kullanımı varsa -ki performans için olması da lazım- bu erişilen alanların sizden başka kimse tarafında direkt denetimi yoktur.
(*) Anonim threadler vs. konusuna hiç girmiyorum bile. (hani postmessage ile değişken transferi vb. durumlardan bahis)
Yazının özeti, iyi bir yapı oluşturmak demek "aslan yattığı yerden belli olur" mantığıyla işi bitince kullanılan hafıza bloğunu temizlikten geçer. Bugünün işini yarına bırakmıyor,
performans gözeterek işi biteni free - nil - unassigned ne lazımda yapıyoruz.