Kapasite Aşımı, Yeniden Tahsis (Reallocation) ve Askıda Kalan Referans

Soru Çözümü: C++ Vektör Reallocation ve Dangling Reference Riski
💡 Çözümü Gör (Tıkla - Öğren)
✅ Doğru Cevap: C) Vektör yeniden tahsis (reallocation) yaptığı için ref geçersiz (dangling reference) hale gelir; tanımsız davranış (Undefined Behavior) oluşur.

Detaylı Açıklama:

  • v.reserve(2); satırıyla vektör için bellekte yalnızca 2 elemanlık yer ayrılmıştır.
  • v.push_back(10); eklendikten sonra int& ref = v[0]; ile 10 değerinin bellekteki adresine bir referans bağlanır.
  • Daha sonra v.push_back(20); ve ardından v.push_back(30); çağrılır. 3. eleman eklendiğinde ayrılan 2 elemanlık kapasite aşılır.
  • Kapasite aşıldığında vektör belleğin başka bir yerinde daha büyük yeni bir alan tahsis eder, eski elemanları oraya taşır ve eski bellek alanını yok eder (reallocation).
  • Bu taşınma sonucunda ref referansı artık yok edilmiş eski bellek adresini göstermeye devam eder (Dangling Reference).
  • Sonraki satırda ref okunmaya çalışıldığında serbest bırakılmış belleğe erişildiği için Tanımsız Davranış (Undefined Behavior) meydana gelir.

Yorum Gönder

0 Yorumlar