sectree.h for_each_entity() UB

  • Konuyu açan Konuyu açan Larry Watterson
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 3
  • Gösterim Gösterim 155

Larry Watterson

Üye
Üye
Mesaj
52
Çözümler
1
Beğeni
180
Puan
699
Ticaret Puanı
0
Burayı görüntülemek için üye girişi yapmalı veya kayıt olmalısınız.


Bu kodda UB var;

it erase edilip continue statement yazılmış. erase(it) sadece silinen elemana ait iterator'ı invalidate eder, statementda loop invalidate edilmiş iteratörü increment ediyor, olması gereken "it = m_set_entity.erase(it)" yazıp for yerine while döngüsüne çevirmek (erase zaten bir sonraki geçerli iterator'ı döndürüyor). Neyse, biraz daha inceleyip özetle C++20 için şöyle bir çözüm üretebilirsiniz;

Burayı görüntülemek için üye girişi yapmalı veya kayıt olmalısınız.


UB ise neden bugüne kadar patlamadı derseniz adı üstünde UB ne olacağını ancak Allah bilebilir, kimse öngöremez teknik detay için compiler dökümanlarına bakmak lazım.
 
Geri
Üst