CodeBlanks Logo Icon CodeBlanks

Dangling referans

Dangling referans kavramını ve güvenliği öğrenirsin.

Dangling referans

Bir referans, bağlandığı değişken ömrünü doldurduğunda geçersiz hale gelir; buna dangling referans denir. Örneğin bir fonksiyon içindeki yerel değişkene referans döndürürsen, fonksiyon çıkışında değişken yok olur ve referans havada kalır.

Dangling referans kullanmak tanımsız davranıştır; program çökebilir, yanlış sonuç verebilir veya görünüşte çalışabilir. Bu yüzden referans döndüren fonksiyonlar yazarken hedefin çağıran taraftan daha uzun yaşadığından emin olmalısın.

Güvenli kullanım

Dangling referansı önlemek için iki basit ilkeyi izle. Birincisi: yerel değişkene referans döndürme. İkincisi: referansın hedefi, referansttan daha uzun yaşamalı.

Bu dersin ödevinde, güvenli bir referans kullanımı olan increment(int& n) fonksiyonunu yazacaksın. Çağıran taraftaki x, fonksiyon çağrısından önce de sonra da yaşar; bu yüzden referans güvenlidir. Referans parametreleri bu açıdan güvenlidir.

Uygulama increment fonksiyonu

void increment(int& n) fonksiyonunu tanımla; gövdede n += 1; yaz. main içinde int x = 10; tanımla, increment(x) çağır, x'i std::cout ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>

// increment fonksiyonunu tanımla

int main() {
    // x değişkenini tanımla
    // increment çağrısı ekle
    // x'i yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

void increment(int& n) {
    n += 1;
}

int main() {
    int x = 10;
    increment(x);
    std::cout << x << "\n";
    return 0;
}

Beklenen çıktı

11

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Dangling referans nedir?

  • Başlatılmamış referans
  • Const olmayan referans
  • İşaretçi olmayan referans
  • Ömrü dolan değişkene referans Doğru cevap

Açıklama: Dangling referans, ömrü dolan değişkene bağlı referanstır.

2 İfadeyi anlamına eşle

Kavram Anlamı
int& n Referans parametre
Yerel değişken Referans verme
const int& Güvenli geçiş
n += 1 Artırma

3 increment gövdesi

Soru
void increment(int& n) { ____ = n + 1; }
Cevap
void increment(int& n) { n = n + 1; }

Açıklama: n = n + 1; n'yi bir artırır.

Başlangıç bölümündeki tüm dersler