170 похожих чатов

Привет, заметил тут разное поведение на двух компиляторах clang, mac

os и msvc windows в следующем коде.


почему так происходит? это уб?

#include <functional>

class a
{
public:
int a = 0, b = 0;
std::function<int()> l;

int f()
{
l = [this](){
a = 1;

l = [](){ return 1; }; // на винде this теряется и в следующей строчке происходит падение, на мак ос нет.

b = 1;
return 0;
};
return 0;
}
};

int main() {
a a_;
a_.f();
a_.l();
}

26 ответов

10 просмотров

предлагаю вопрос перенести в @procxx

Ilya Zviagin
Не, не надо переносить.

что не надо? может ты и ответ правильный знаешь?

Я думаю, это из-за отладочного режима в MSVC , она проверяет в функции this.

Ilya Zviagin
Так там его и нету.

"не зли меня, убью." (с) приключение итальянцев в россии

Поясни, где там что теряется? Какое поведение программы ты наблюдаешь?

Dmitry- Автор вопроса
Ilya Zviagin
Поясни, где там что теряется? Какое поведение прог...

смотрю в дебагере, this определяется как 0xadddddd и падает, после присвоения нового значения лямбде

Dmitry- Автор вопроса
Dmitry
смотрю в дебагере, this определяется как 0xadddddd...

при этом если в обнулении лямбды я захвачу this, то все пройдет штатно

Anatoly Shirokov
[this] же

Я про вторую говорил.

Ilya Zviagin
Я про вторую говорил.

пока идет исполнение первой ее контекст не должен измениться, то что ты присваиваешь l новую лямбду не означает, что контекст текущей должен измениться

Вижуалка какая? (компилятор)

Не пробовал переписать l = [](){ return 1; }; на l = []() -> int { return 1; };

example.cpp <source>(6): error C2461: 'a': constructor syntax missing formal parameters <source>(13): error C2513: 'a': no variable declared before '=' Compiler returned: 2

Pavel Perekhozhikh
example.cpp <source>(6): error C2461: 'a': constru...

Стандартик не забыл повыше поставить ?

Pavel Perekhozhikh
17 был

Ну так не может быть...

Pavel Perekhozhikh
https://godbolt.org/z/oa84vq

Там лучше внутреннюю переменную не A назвать, она совпадает с именем класса. Но это ничего не меняет.

Ilya Zviagin
Там лучше внутреннюю переменную не A назвать, она ...

Локально у меня все без крашей проходит, this не трется

Похожие вопросы

Обсуждают сегодня

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
А чем вам питонисты не угодили?😂
.
79
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
Какое виндузовое сообщение приходит TTabSheet, что риэлайняться контролы на нем, даже у которых парент другой? Ситуация: открываю форму - кнопок нет, перелистываю на другой т...
Катерина Свиридова
7
Карта сайта