bugün
- millet açsa neden kafeler tıklım tıklım16
- uzağı göremeyen insan19
- kekeme olan biri doktor olurmu10
- ak partiliyi çok fena döven chp belediye başkanı19
- evlilik20
- bir şarkı sözü der ki11
- anın görüntüsü21
- arkadaşlar cumaya neden gelmediniz15
- sırtınızı bir sözlük kızına dayar mısınız10
- nickini google da aratınca çıkan ilk görsel17
- seni seviyoruz insan olmaya çeyrek kala8
- ali erbaş12
- bik bik moderatör olsun19
- icardi19058
- diyanet işleri başkanına audi 6 tahsis edilmesi13
- bik bik moderatör olunca bana kız ayarlar mı10
- kent lokantası niye bedava değil demek24
- antalya'ya abartılmış şehir diyen göt11
- avrupanın yarrağı yemesi yakındır21
- istanbul suriyenin başkentidir12
- 26 nisan 2024 adana demirspor galatasaray maçı46
- kültürlü entelektüel alçak gönüllü güzel kadın8
- türkiyede çok abartılan arabalar18
- nervio'nun ellerinde cenneti koklamak9
- cumaya gidenlerin çok azalması13
- pahalılıktan dolayı suriyeye dönen kadın8
- almanya8
- boşuna yaşıyorum hissi15
- icardi1905 silik olsun kampanyası31
- azerileri çok seviyorum ne yapmalıyım13
- genç kızlıktan teyzeliğe geçiş13
- yakışıklı erkeği çirkin gösterecek şeyler8
- sözlük kızlarının don renkleri19
- kanınıza rengini verir misiniz15
- aristoteles'in orta yolu10
- sözlük erkeklerinin bugünkü kombinleri15
- patiswiss14
- integralin müfredettan kaldırılması12
- bir sözlük kızı ile yakınlaşmak16
- manyak olmaya karar verdim silik olsun kampanyası14
- 22 şubat 2024 sparta prag galatasaray maçı14
- birini donuzlayarak ceza vermek9
- kalbin sadece bir kişiyi seveceği saçmalığı9
- arkadaşlar biri var18
- karınıza range rover alır mısınız8
- escort fiyatlarının güncellenmesi12
- modern kadinin ucuz ve kolay ulasilabilir olmasi17
- nervio'ya aşık olmak10
- balayını italyada yapmak isteyen nişanlı14
- futbolcu ismiyle nick almak14
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