bugün
- galatasaray9
- aklınıza gelen şarkı sözü6
- bennu gerede'nin boynunda taktığı vibratörlü kolye3
- taşaklardan birinin kayıp olması5
- sözlükler arası savaş çıksa11
- dönmek istenilen yıl2
- ütü13
- atatürk düşmanlarının ortak özellikleri3
- yediği restoranda kirlileri mutfağa götüren kişi2
- cedidacer bey ne yapıyor sorusu7
- çay içen kız9
- anın fotoğrafı14
- sözlük yazarlarının akşam yemekleri9
- uludağ sözlük çeteleri9
- bir şeyler söyle4
- duyulan en ilginç isim5
- evleneceğiniz yazarı neye göre seçersiniz9
- oralet içen erkek5
- evde yapılabilecek aktiviteler4
- çaya şeker atan erkek5
- en boktan on yıl7
- mutsuz olmak3
- kalem4
- 2036 da paranın bir önemi kalmayacak7
- kız arkadaşına mini etek giydiren erkek3
- galatasaray 3 rennes 33
- 2 ağustos 2026 galatasaray rennes maçı3
- yıkık yazarlar4
- latte içen erkek4
- arkadaşlar ne yapıyorsunuz9
- patates kızartması4
- red flag erkek listesi9
- gocu bak bi5
- menemen9
- ona bir şey söyle13
- en tehlikeli insan tipleri2
- yerinde dur3
- mcdonalds nasıl okunur sorunsalı9
- yelpaze3
- ayrılık8
- smallville'deki konuk oyuncular3
- hırvatistan14
- dolma kalem3
- doa otomatı3
- borç ve kira olupta iyi olan para7
- erdal beşikçioğlu8
- yunanistan29
- bik bik'in mutfağına konuk olmak29
- telefona cevap vermeyen kız3
- veda mesajları hep yanlış yazılır2
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