- *qt *говно *идиотыХаха, все же как классно заниматься разработкой на этих ваших плюсцах. А в чем прелесть? А прелесть в том, что документация Qt нагло врет про семантику op< для итераторов QList.
#1025585/73
#1025585/81from idead, 9 months ago
Replies (45)
- @mejik:выглядит так, будто ты нажрался говна и всем рассказываешь какое это говно....ах да, ты и правда нажралсяfrom talkonaut-ED310F08, 9 months ago
- @0xd34df00d:@analizer > хуй знает как это вообще работает
Чертовски верно подмечено, бро.from idead, 9 months ago, in reply to /1 - @0xd34df00d:@magog Потому что это член QList::const_iterator.from idead, 9 months ago, in reply to /5
- @jtootf:так кто-нибудь поделится пастой исходников const_iterator::operator<()? чего вы такие жадные, ну?from abel, 9 months ago
- @0xd34df00d:@jtootf 194 inline bool operator<(const const_iterator& other) const
195 { return i < other.i; }
Где i — Node *i;
Нихрена он не элементы сравнивает.from idead, 9 months ago, in reply to /7 - @jtootf:@0xd34df00d т.е. он сравнивает указатели на эти элементы, так? а как выглядит operator++()?from abel, 9 months ago, in reply to /8
- @0xd34df00d:@jtootf inline const_iterator &operator++() { ++i; return *this; }from idead, 9 months ago, in reply to /9
- @jtootf:@0xd34df00d кстати, тоже fail какой-то. почему у него семантика преинкремента, а не постинкремента?from abel, 9 months ago, in reply to /10
- @0xd34df00d:@jtootf Потому что постинкремент с интом в скобочках.from idead, 9 months ago, in reply to /13
- @0xd34df00d:@jtootf inline const_iterator operator++(int) { Node *n = i; ++i; return n; }from idead, 9 months ago, in reply to /17
- @0xd34df00d:Блядь, это говно даже с проверкой на < не работает. Wut wut wut.from idead, 9 months ago
- @0xd34df00d:@analizer Да, inline const_iterator(Node *n) : i(n) {}, никаких тебе explicit.from idead, 9 months ago, in reply to /20
- @jtootf:@0xd34df00d а баг воспроизводится на других данных, кстати? можно набрать какой-нибудь небольшой QList, скопипастить себе код find_if, и пройтись пошагово?from abel, 9 months ago, in reply to /19
- @0xd34df00d:@jtootf Гм, я тут уже ничего не понимаю. щас, пытаюсь разобраться, пихаю дебаговые трейсы, не поможет — пройдусь пошагово.from idead, 9 months ago, in reply to /22
- @0xd34df00d:@0xd34df00d Пиздец, до выхода из функции FindElement он равен list.end (), после — нет. ШТО.from idead, 9 months ago, in reply to /23
- @0xd34df00d:@jtootf Едва, ей нечем в стек срать, а вокруг вроде и не срет. Гонять это под valgrind'ом — пиздец, можно ехать пить чай на филфак МГУ из физтеха-то.from idead, 9 months ago, in reply to /26
- @0xd34df00d:@analizer > non-trivial copying
Што? const_iterator?from idead, 9 months ago, in reply to /25 - @jtootf:@0xd34df00d gdb умеет ставить брейкпоинты на область памяти. фиксируешь свой горе-итератор — и вперёдfrom abel, 9 months ago, in reply to /27
- @0xd34df00d:@jtootf А можешь объяснить мне, идиоту, где здесь может засраться стек? paste.pocoo.org
В 78-строке хуита и не то, что на 22'ой.from idead, 9 months ago, in reply to /30 - @0xd34df00d:@analizer Нужный участок локализован, тащем, я там номера нужных строк написал.from idead, 9 months ago, in reply to /32
- @0xd34df00d:@0xd34df00d В смысле, как source может успеть здесь попортиться-то.from idead, 9 months ago, in reply to /31
- @jtootf:@0xd34df00d кстати, а как итераторы преобразуются вообще? find_if тебе возвращает что?from abel, 9 months ago, in reply to /31
- @jtootf:@0xd34df00d из std. как из него делается QList::const_iterator?from abel, 9 months ago, in reply to /36
- @0xd34df00d:@jtootf Э, прости, что? find_if принимает два QList::const_iterator.from idead, 9 months ago, in reply to /37
- @jtootf:@0xd34df00d а в true отрабатывает 22 строка? можешь там же вывести *pos (если UB не съест), или что-то подобное? во всех отладочных строках, желательно. в идеале i бы получить (значение указателя в итераторе)from abel, 9 months ago, in reply to /41
- @0xd34df00d:@jtootf Да, отрабатывает. Все остальные выведу чуть позже, щас личкрафты пытаются запуститься под валгриндом и просраться в консоль кучей кутешных ошибок.from idead, 9 months ago, in reply to /42
- @jtootf:@0xd34df00d в смысле — точно ли 22? :) а то у тебя там вывод однох~wодинаковыйfrom abel, 9 months ago, in reply to /43
- @0xd34df00d:@jtootf Да, там три true подряд идет, одна с сигнатурой функции, потом два голых. А потом 1 false.from idead, 9 months ago, in reply to /44
- @0xd34df00d:@0xd34df00d Гм, под валгриндом оно нихуя не упало.from idead, 9 months ago, in reply to /45
- @jtootf:@0xd34df00d это бывает. а покажи ещё конструктор копирования этого const_iterator, пожалуйста. всё-таки у тебя там два разных объектаfrom abel, 9 months ago, in reply to /46
- @0xd34df00d:@jtootf Блин, оно теперь и без валгринда не падает. :(
224 inline const_iterator() : i(0) {}
225 inline const_iterator(Node *n) : i(n) {}
226 inline const_iterator(const const_iterator &o): i(o.i) {}from idead, 9 months ago, in reply to /47 - @0xd34df00d:@jtootf Гм, как в gdb поставить бряк на функцию в анонимном неймспейсе внутри другого неймспейса?from idead, 9 months ago, in reply to /47
- @0xd34df00d:@0xd34df00d Да ептваю, value optimized out. Собирать в Debug-сборке и молиться. что баг от этого не уйдет.from idead, 9 months ago, in reply to /50