Dmitriy / დიმიტრი
👍понял, спасибо огромное)
Dmitry
а повангуйте плз по ехепшну
*** 1483925505.967354 << Sent query magic 0xcc104937 size 24 seq 22385
*** 1483925506.029518 lua: attempt to call a nil value
> *** Error in `./tg/bin/telegram-cli': malloc(): smallbin double linked list corrupted: 0x000000000f9aa100 ***
и что сделать, чтобы оно было информативнее?
Andrei
трейс очень маленький.
Andrei
Не понятно, какой квери выполнялся.
Andrei
Если это телеграм, то надо указать layer
Andrei
указать параметры запросы
Dmitry
ну lay 57
перед вызовом lua принтом выводить?
Andrei
Если ты отлаживаешься сейчас то да, выводи по максимуму всё.
Dmitry
не отлаживаюсь. оно на серваке в скрине крутится и начало вываливаться зачем-то
Andrei
attempt to call a nil value — вот это конечно супер.
Andrei
Хотя бы строчку соотв. луа скрипта бы указать .__.
Andrei
просто совсем не понятно что и где упало.
Dmitry
а почему оно трейс не вывалило, кстати?
Dmitry
и что делать, чтобы вываливало
Andrei
У меня тот же вопрос.
Andrei
А, сорян, я думал это ТВОЙ код.
Andrei
Если это не твой, то я не знаю. Поищи ключи запуска
Andrei
может там есть -v
Andrei
или —log=DEBUG
Andrei
:)
Dmitry
лучше конструкцию языка скажи для трейса. или может какие параметры компилятора за это отвечают.
хотя с -ggdb собрано…
Evgenii
а дистанс что показывает?
Поменял код. if ((vec.size() > 0 && std::count(vec.begin(), vec.end(), vec.back()) >= 3) теперь. В векторе сидят uint_fast64_t. Кроме push'а в одном месте и pop'а в другом ничего не делаю. count доходит очень далеко за пределы вектора и счастливо падает с сегфолтом
Evgenii
res += std::to_string(vec.size());
vec != tmp vec.push_back(x);
vec.pop.back();
(vec.size() > 0 && std::count(vec.begin(), vec.end(), vec.back()) >= 3)
Evgenii
Всё
Andrei
А в чем проблема?
Andrei
А код какой?
Andrei
Как вызывается count
Evgenii
Andrei
Сколько элементов равны последнему.
Andrei
Evgenii
Andrei
Там ничего не написано.
Andrei
Я вижу 10 мест с проблемой.
Andrei
Нужен код, который воспроизводит проблему.
Andrei
Потому что из приведенного кода не видно проблемы.
Andrei
То есть она, конечно, очевидна.
Andrei
И я мог бы прям щас сказать, но это неинтересно :3
Andrei
@EvgeniyZh
Andrei
Хотя даже из приведенного огрызка о ней можно догадаться.
Andrei
Где?
Andrei
А, ты про std::count?
Andrei
F xnj nfv&
Andrei
А что там?
Andrei
Там всё верно
Evgenii
Andrei
К тому же проблема не там, раз падает в count
Andrei
Нет.
Andrei
Он ведь берет .end() и .begin()
Andrei
:)
Evgenii
Evgenii
а до этого далеко..(
Andrei
Ладно. Не буду кокетничать.
Andrei
Короче. count падающий далеко за концом вектора — это инвалидированный вектор
Andrei
Если ты возьмешь .size() непосредственно перед вызовом count
Andrei
то увидишь, что он равен чему-нибудь здоровенному
Evgenii
6
Andrei
А знаешь как я это понял?
Andrei
Окей, значит один из указателей сломан
Evgenii
он равен 6
Evgenii
из каких?
Andrei
Да, тогда сломан не size
Andrei
А end()
Andrei
У тебя там выше написаны все строки содержащие твой вектор.
Andrei
В том числе pop_back(0
Andrei
Но строчки проверяющей число элементов у тебя нет!
Andrei
Это значит, что ты спокойно мог отхватить проблему в pop_back
Andrei
который лишний элемент попнул
Andrei
и вызвал UB
Andrei
pop_back у вектора НЕ ПРОВЕРЯЕТ empty
Andrei
На пустом векторе это может вызвать UB в том числе в виде самого испорченного вектора.
Andrei
Который проявляется в ебанутых итераторах.
Andrei
Вот что бросается в глаза из твоих 4-х строчек и описания проблемы в виде count-а с segfault-oм
Andrei
Очевидно, что в коде с count нет ошибки, значит, логическим исключением ошибка в vec
Andrei
Инвалидированный вектор
Andrei
Единственная инструкция которая на это претендует у тебя там — pop_back
Andrei
Поскольку ты сам сказал, что в векторе числа, и значит точно живые объекты.
Andrei
При этом явно не видно вызова vec.size или vec.empty ДО pop_back, что намекает, что ты этого не делаешь.
Andrei
Сайз вектора может быть валидным в дебаге, лучше его именно распринтить в релизе аккурат до инструкции с std::count