Soru Çözümü: C++ Binary Dosyalara std::string Yazmanın Riskleri
💡 Çözümü Gör (Tıkla - Öğren)
✅ Doğru Cevap: B) string sınıfı metni heap bellekte tuttuğu ve kendi gövdesinde sadece bellek işaretçisi (pointer) taşıdığı için; doğrudan binary yazıldığında dosyaya metin değil geçersiz bir bellek adresi yazılır ve okunduğunda çökme (segmentation fault) oluşur.
Detaylı Açıklama:
std::stringdinamik bir veri yapısıdır; gerçek metin verisini heap (dinamik bellek) üzerinde saklar, nesnenin kendi gövdesinde ise sadece boyutu, kapasitesi ve o heap alanını gösteren bir işaretçi (pointer) tutar.write((char*)&kisi, sizeof(Kisi))gibi bir sığ bellek kopyalaması (shallow memory copy) yapıldığında metnin kendisi değil, o anki çalışma zamanına ait geçici bir işaretçi adresi dosyaya yazılır.- Program yeniden açılıp dosya okunduğunda (
read), o adres artık geçersiz olacağından işaretçi boşa düşer (dangling pointer) ve nesneye erişilmeye çalışıldığında program çöker (Segmentation Fault). - Bu sebeple ikili dosyalara doğrudan yazılacak struct yapılarında
std::stringyerine sabit boyutlu karakter dizileri (örneğinchar isim[50];) tercih edilmelidir (POD / Trivial tipler).

0 Yorumlar