Size: a a a

2020 February 16

I

Inttech in Qt
Anatoly Shirokov
Сплайн интерполяция?
это как понять?
источник

Е

Егор in Qt
Inttech
это как понять?
загуглить
источник

I

Inttech in Qt
Егор
загуглить
интерполяция я знаю что это
источник

I

Inttech in Qt
Там вектор точек
источник

Е

Егор in Qt
Inttech
интерполяция я знаю что это
Сплайнами это вроде-бы когда по участкам разбивают
источник

I

Inttech in Qt
я его в QPainterPath загонял хотел скруглить не получается
источник

AS

Anatoly Shirokov in Qt
Inttech
это как понять?
источник

AS

Anatoly Shirokov in Qt
Реализуешь, получишь  сглаживание
источник

I

Inttech in Qt
Спасиб!
источник

GS

Georgy Shepelev in Qt
Но у тебя алиасинг
источник

O

Ofee in Qt
Vladislav Navrocky
Я пол года назад тоже удивлялся тут и перешел на просмотр файловой системы после этого
Столкнулся с тем, что у меня this, переданный в лямбду, становится невалиден. Вызов переданной лямбды делается таким образом:
template<typename... Args>
void call_impl(Args&&... args) const
{
 QMetaObject::invokeMethod(
   context,  
   [this, args = std::tuple(std::forward<Args>(args)...)]() mutable {
     std::apply(callback, std::move(args));
   },
   Qt::ConnectionType::QueuedConnection);
}
context
в данном случае — это QAbstractEventDispatcher*, я его получаю через QAbstractEventDispatcher::instance(); однократно при создании моего объекта.
Замена тела на std::apply(callback, std::tuple(std::forward<Args>(args)...));  исправляет падение, но я не очень понимаю, в какую сторону дальше копать в поисках причины.

Возможно, вы дадите мне направление или, может, даже у кого-то хватит экстрасенсорных способностей, чтобы сразу найти у меня ошибку...
Если нужно будет, полный код моего класса выложу, а вот с минимально-воспроизводимым примером труднее — баг стабильно воспроизводится в моём приложении, однако как его повторить в упрощённом — не знаю.

Ну, и важное уточнение: воспроизводится и при работе в одном потоке, и в нескольких
источник

Е

Егор in Qt
Ofee
Столкнулся с тем, что у меня this, переданный в лямбду, становится невалиден. Вызов переданной лямбды делается таким образом:
template<typename... Args>
void call_impl(Args&&... args) const
{
 QMetaObject::invokeMethod(
   context,  
   [this, args = std::tuple(std::forward<Args>(args)...)]() mutable {
     std::apply(callback, std::move(args));
   },
   Qt::ConnectionType::QueuedConnection);
}
context
в данном случае — это QAbstractEventDispatcher*, я его получаю через QAbstractEventDispatcher::instance(); однократно при создании моего объекта.
Замена тела на std::apply(callback, std::tuple(std::forward<Args>(args)...));  исправляет падение, но я не очень понимаю, в какую сторону дальше копать в поисках причины.

Возможно, вы дадите мне направление или, может, даже у кого-то хватит экстрасенсорных способностей, чтобы сразу найти у меня ошибку...
Если нужно будет, полный код моего класса выложу, а вот с минимально-воспроизводимым примером труднее — баг стабильно воспроизводится в моём приложении, однако как его повторить в упрощённом — не знаю.

Ну, и важное уточнение: воспроизводится и при работе в одном потоке, и в нескольких
а дебагер не показывает ничего интересного?
источник

BB

Bohdan Bessonov in Qt
Ставь меморибрейкпоинт на изменение памяти this, должно помочь найти проблемку
источник

O

Ofee in Qt
Егор
а дебагер не показывает ничего интересного?
@b2soft, @Malbu0698, кроме того, что при совершенно случайных обстоятельствах переписывается __this вместе с куском памяти рядом — ничего интересного я не смог обнаружить с помощью отладчика, не исключаю, что мне навыков не хватило. Совершенно случайные обстоятельства — это, например, возврат вектора из виртуальной функции. Если я возвращал вектор из трёх элементов — переписывало, если из двух — нет (точнее, не переписывало интересующий меня участок, портило ли оно что-то ещё, сказать затруднительно)
источник

Е

Егор in Qt
Ofee
@b2soft, @Malbu0698, кроме того, что при совершенно случайных обстоятельствах переписывается __this вместе с куском памяти рядом — ничего интересного я не смог обнаружить с помощью отладчика, не исключаю, что мне навыков не хватило. Совершенно случайные обстоятельства — это, например, возврат вектора из виртуальной функции. Если я возвращал вектор из трёх элементов — переписывало, если из двух — нет (точнее, не переписывало интересующий меня участок, портило ли оно что-то ещё, сказать затруднительно)
пахнет уб
источник

BB

Bohdan Bessonov in Qt
Ofee
@b2soft, @Malbu0698, кроме того, что при совершенно случайных обстоятельствах переписывается __this вместе с куском памяти рядом — ничего интересного я не смог обнаружить с помощью отладчика, не исключаю, что мне навыков не хватило. Совершенно случайные обстоятельства — это, например, возврат вектора из виртуальной функции. Если я возвращал вектор из трёх элементов — переписывало, если из двух — нет (точнее, не переписывало интересующий меня участок, портило ли оно что-то ещё, сказать затруднительно)
Как будто выход за пределы рандомно что то перетер
Над дебажить(
источник

O

Ofee in Qt
Егор
пахнет уб
Да, я это понял, но хотелось бы хотя бы направление для мысли
источник

Е

Егор in Qt
Ofee
Да, я это понял, но хотелось бы хотя бы направление для мысли
давай код посмотрим, может упускаешь что-то, вечер всё-таки
источник

AS

Anatoly Shirokov in Qt
Ofee
@b2soft, @Malbu0698, кроме того, что при совершенно случайных обстоятельствах переписывается __this вместе с куском памяти рядом — ничего интересного я не смог обнаружить с помощью отладчика, не исключаю, что мне навыков не хватило. Совершенно случайные обстоятельства — это, например, возврат вектора из виртуальной функции. Если я возвращал вектор из трёх элементов — переписывало, если из двух — нет (точнее, не переписывало интересующий меня участок, портило ли оно что-то ещё, сказать затруднительно)
Попробуй внешние тулы типа dr.memory, они ошибки по работе с памятью тебе подкинут. А так у тебя расстрел памяти, трудноуловимый случай.
источник

O

Ofee in Qt
Bohdan Bessonov
Как будто выход за пределы рандомно что то перетер
Над дебажить(
Дело в том, что ни сырых массивов, ни сырых указателей у меня в коде вообще нет. Если только я где-то что-то опасное с итератормаи сделал...
Всё, что сумел определить — что изменения участка кода с непосредственным вызовом моего коллбека то ли решает проблему, то ли просто скрывает от меня...
источник