bugün
- gammazlama yapmamak10
- gammaz beni çaylak yapmaz ki gammaz beni çsy8
- yorgun mermi23
- beyazsemsiyeliyabanci29
- haysenin128
- bu köyden olsam ne olacak7
- 7 haziran 2026 büyük sözlük ifşası32
- hatırlanan en eski reklam sloganı5
- omurgasız tekerlek5
- en gey özelliğiniz15
- doktorlara saygının kalmamasının temel nedenleri7
- yapay zeka moderatörü14
- isimsiz orospu çocukları4
- uludağ sözlükteki sıcak ve samimi aile ortamı8
- gina carano13
- arkadaşlar kavgayı bırakıp buraya bakar mısınız4
- melis sezen'in memeleri3
- aziz yıldırım4
- aym'nin süresiz nafaka kararına isyan eden kadın4
- sevişmek istediğiniz kadın yazarlar7
- koç holding binalarına saldırı2
- diamond bosphoruss denen yazar7
- karton toplayan çocuk4
- sözlüğün kırbacı8
- en son ne yediniz12
- anın görüntüsü21
- üstteki yazar hakkında fikrini söyle63
- mılli yazılım f-16 ların kabiliyetini artıracak9
- hangi yazarla evlenmek isterdiniz2
- katatespizartmasi15
- taciz başkan fenerbahçe şampiyon2
- buddy dude17
- alman pastası2
- gocu bak bi3
- kavgacı yazarlar2
- cennet hurilerinin özellikleri2
- geleneksel son nefes2
- kız tavlayamamak2
- evrenin kaprisleri2
- palavracı iblislerden olmak2
- mocu4
- kılıçdar'ın chp'nin oyunu yükselttiği yalanı5
- tanrının adaletini taklit etmek2
- olan adam gelecekmiş hissi2
- pitbull'un sanatçı olması2
- kimliği belirsiz melek gelmesi2
- g35
- gönül çemberini kıran müzisyeni dövmek2
- chp'lilerin gene kılıçdaroğlu'na oy verme ihtimali6
- kirasız faturasız asgari ücret yeter mi sorunsalı2
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üncel Önemli Başlıklar
