- 1
- 2
- 3
- 4
- 5
- 6
- 7
int F(x)
{
if (.chto-to) v.push_back(.koe-chto.);
int ind = somefunc(x);
for each y in x.childs
v[ind].res += F(y);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+163
int F(x)
{
if (.chto-to) v.push_back(.koe-chto.);
int ind = somefunc(x);
for each y in x.childs
v[ind].res += F(y);
}
Не говнокод, но пример того, как из std::vector можно выстрелить себе в ногу
Комментарий автора кода ( http://codeforces.ru/blog/entry/1719#comment-32824 ):
такая штука получала крэш на компиляторе жюри, из-за того что сначала вычислялся адрес v[ind].res затем вызывалась снова F, которая пушбекает в вектор v, и может тем самым заставить вектор перевыделить память, тем самым адрес вычисленный ранее становился инвалидным.
я этот баг долго не мог найти, потомучто студия генерила нормальный код, не вызывающий креша
TheCalligrapher 18.04.2011 21:36 # +5
daemon_master 18.04.2011 21:57 # −1
burdakovd 18.04.2011 22:04 # 0
Но меня побудил запостить сюда этот код тот факт, что я при беглом взгляде на код не увидел подозрительных мест. И если бы не комментарий рядом, неизвестно сколько бы времени пытался понять что тут не так.
Если вы сразу увидели проблему в коде, то рад за вас.
daemon_master 18.04.2011 22:59 # 0
absolut 18.04.2011 23:15 # +6
Lure Of Chaos 19.04.2011 12:49 # 0