bugün
- 18 ekim 2026 uludağ sözlüğün hacklenmesi4
- abdullah öcalana'ın yeni konutuna taşınması20
- iskilipli atıf hoca8
- millette manyak para var21
- handjob3
- anın görüntüsü32
- zenci uşağın aniden içeri girmesi5
- yere düşen araba anahtarı3
- nar tanelemek5
- neden herkes sabah erken kalkmayı erdem sanıyor3
- nar2
- koltukaltını maymun gibi kaşımak3
- erken uyanmak4
- quentin tarantino nun en iyi filmi3
- papatya çayı içen erkek11
- kardeşlik2
- boşandığı eşine araba alan adam7
- tbmm de sanayi ve teknoloji bakanlığı bütçesi3
- sözlük kürdü54
- kezoya baştan aşağı hayır duaları yağdırmak2
- kuzey buz denizi3
- birader de biraderilyö3
- 6 yaşındaki kızını satan anne10
- cadılar bayramı kutlayan gerizekalı türkler31
- fon krizi kimin üstüne yıkılacak19
- platon un mağara alegorisi2
- cuckold2
- cadılar bayramı kutlamayan geri zekalılar13
- insan olmaya çeyrek kala tarzı entry girmek10
- çaykur'un türk çayı ibaresini kaldırması13
- ilkokulda dayak yemiş efsanevi nesil14
- 30 liraya satılan tavuk döner13
- yazılımcının flört edememesi2
- ben tevratı da okudum incili de12
- 33 ülkenin stok yapın çağrısı2
- abd arabuluculuğunda ukrayna rusya müzakereleri2
- traveler of secret moments tarzı enrty girmek8
- ananı mı dinlersin karıyı mı11
- volkswagen passat10
- pankek yiyen erkek6
- yaşıyor musunuz uludağ sözlük7
- traş olmaya üşenmek7
- kale3112'deki 3112'nin anlamı nedir sorunsalı5
- türkiyeli kahvesi8
- ismail kartal19
- evde kalmış 30 yaşında kız22
- 007 tarzı entry girmek4
- osman pamukoğlu14
- 20075
- sözlükteki kızların bilgisiz olması23
C' de
int * doWhateverIsayYouIdiotFunction( int a ){
int x = a * a;
return &x;
}
seklinde bir fonksiyon kullandigimizda, x degiskeni fonksiyon deger dondurdugu an ulasilamaz oldugu icin x in adresini gosteren ve fonksiyonun donus degerini atadigimiz pointer artik bir dangling pointer dir.
Vatana millete hayirli olsun.
int * doWhateverIsayYouIdiotFunction( int a ){
int x = a * a;
return &x;
}
seklinde bir fonksiyon kullandigimizda, x degiskeni fonksiyon deger dondurdugu an ulasilamaz oldugu icin x in adresini gosteren ve fonksiyonun donus degerini atadigimiz pointer artik bir dangling pointer dir.
Vatana millete hayirli olsun.
Daha önce bir sitede paylaştım. Buraya da paylaşayım.
Bir pointer düşünelim bu pointer’ı bir değişkene atayalım. Sonra ikinci bir pointer olduğunu varsayalım bu ikinci pointer’ı da ilk pointer’a atayalım. Bu durumda iki pointer da aynı adrese bakmış oluyor. Bu durum segmentation fault hatasina sebep olmaktadir ve buffer overflow yapılmasına davet çıkardığı için güvenlik açığı oluşturabilir.
ilk pointer fflush ve stding parametresiyle temizleniyor yani deallocate ediliyor varsayalım. Bu durumda bu bölgenin değeri nil olmakta. Ve bu durumda ikinci pointer dangling pointer yani sarkıtılmış gösterge (o kadar çevirisini aradım en mantıklısı bu oldu) olmakta.
Çözüm için bazı yöntemler var. Bunlardan birisi akıllı pointer kullanımıdır. C++11 ile kullanımı biten auto_ptr ve onun yerine gelen unique_ptr kullanılabilir ilk yöntemlerdir.
Bir de bunun başka bir alternatifi olarak tombstone metodu var. Burada da yapılan şey pointer değişkenin başına başka bir değer ekliyoruz.
Öncelikle bahsettiğimiz konuya dair bir örnek kod verelim:
görsel
Bu hataya yakalanmış bir kodun çıktısı şöyle olacaktır. Tabii bu sistemden sisteme göre değişir. Aslında bu çıktı çöp bir değerdir.
Örneğin koding.com sanal makinesinde yaptığım denemenin sonucu:
görsel
Bu da kendi makinemde yaptığım işlemin sonucu:
görsel
Bu hatanın bize verdiği çıktılar compile time’da şöyle olacaktır:
warning: function returns address of local variable [-Wreturn-local-addr]
ya da
warning: function returns address of local variable
Bu hataları alıyorsak derleme zamanında demek ki bir yerlerde dangling pointer oluşmuştur. Bunu çözmemiz aslında basit. Verdiğimiz kodda oluşturduğumuz x değişkenini static variable’a çevirmemiz yetecektir.
Yani bu durumda şöyle bir değişiklik olacak:
görsel
Şimdi artık bu kodumuz dangling pointerdan arındırılmış vaziyette. Buradaki x değişkeni yerel bir değişkendir. x değişkeninin adresi cagri işlevi içerisinde döndürüldükten sonra sıfırlanıyor. Ancak pointer hala bu adresi işaret ediyordu. Dangling pointer hatasının açıklaması buydu. Biz bu değişiklik ile bu hatayı çözüme kavuşturmuş olduk.
Koding sanal makinesindeki çıktı:
görsel
Kendi makinemdeki çıktı:
görsel
Bir pointer düşünelim bu pointer’ı bir değişkene atayalım. Sonra ikinci bir pointer olduğunu varsayalım bu ikinci pointer’ı da ilk pointer’a atayalım. Bu durumda iki pointer da aynı adrese bakmış oluyor. Bu durum segmentation fault hatasina sebep olmaktadir ve buffer overflow yapılmasına davet çıkardığı için güvenlik açığı oluşturabilir.
ilk pointer fflush ve stding parametresiyle temizleniyor yani deallocate ediliyor varsayalım. Bu durumda bu bölgenin değeri nil olmakta. Ve bu durumda ikinci pointer dangling pointer yani sarkıtılmış gösterge (o kadar çevirisini aradım en mantıklısı bu oldu) olmakta.
Çözüm için bazı yöntemler var. Bunlardan birisi akıllı pointer kullanımıdır. C++11 ile kullanımı biten auto_ptr ve onun yerine gelen unique_ptr kullanılabilir ilk yöntemlerdir.
Bir de bunun başka bir alternatifi olarak tombstone metodu var. Burada da yapılan şey pointer değişkenin başına başka bir değer ekliyoruz.
Öncelikle bahsettiğimiz konuya dair bir örnek kod verelim:
görsel
Bu hataya yakalanmış bir kodun çıktısı şöyle olacaktır. Tabii bu sistemden sisteme göre değişir. Aslında bu çıktı çöp bir değerdir.
Örneğin koding.com sanal makinesinde yaptığım denemenin sonucu:
görsel
Bu da kendi makinemde yaptığım işlemin sonucu:
görsel
Bu hatanın bize verdiği çıktılar compile time’da şöyle olacaktır:
warning: function returns address of local variable [-Wreturn-local-addr]
ya da
warning: function returns address of local variable
Bu hataları alıyorsak derleme zamanında demek ki bir yerlerde dangling pointer oluşmuştur. Bunu çözmemiz aslında basit. Verdiğimiz kodda oluşturduğumuz x değişkenini static variable’a çevirmemiz yetecektir.
Yani bu durumda şöyle bir değişiklik olacak:
görsel
Şimdi artık bu kodumuz dangling pointerdan arındırılmış vaziyette. Buradaki x değişkeni yerel bir değişkendir. x değişkeninin adresi cagri işlevi içerisinde döndürüldükten sonra sıfırlanıyor. Ancak pointer hala bu adresi işaret ediyordu. Dangling pointer hatasının açıklaması buydu. Biz bu değişiklik ile bu hatayı çözüme kavuşturmuş olduk.
Koding sanal makinesindeki çıktı:
görsel
Kendi makinemdeki çıktı:
görsel
Gündemdeki Haberler
Güncel Önemli Başlıklar