21 Temmuz 2009

"Pointer" hatası

Kodda bir hata yapıp yedeğini de sildiğim için yıllardır bir köşede duran "chrono+" kodunu dün düzeltebildim. Kod hala çok çirkin,biraz daha düzenledikten sonra yayınlayacağım. Saptayabilmek için saatlerimi harcadığım hata ise, C++'ya yeni başlayanların sıkça yaptığı, benim de başkalarının kodunda genellikle kolay yakaladığım bir şeydi, şunun gibi.




C++'ya aşina olanlar buradaki hatayı hemen görmüştür. Basitçe açıklayalım:

main() içindeki scr değişkeninde rasgele, anlamsız bir adres var. Bu adresi kullanarak bir fonksiyon çağırdığımızda(init()), bu adres çağırılan fonksiyona kopyalanıyor. init() içindeki new komutuyla scr değişkenine yeni ve anlamlı bir adres atanıyor. Fakat scr ile screen aynı değişken değil, sadece başta aynı değere sahitiler. Bu yüzden init() fonksiyonundan sonra screen'in değeri değişmiyor, aynı anlamsız adresi göstermeye devam ediyor. Buraya geldiğinizde hala kafanız karışıksa şu kodu çalıştırmayı deneyin:




Kendi koduma gelince, dediğim gibi, biraz daha adam ettikten sonra "arıza" adıyla yeniden yayınlayacağım. Şimdiki haliyle, "canavar"'ın yayınladığı halinden pek bir farkı yok, görünüş olarak.