Size: a a a

2021 March 14

IA

Ilia Abernikhin in pro.cxx
ub это дословно не определенное поведение, до тех пор пока вы итерируетесь в пределах выделеной памяти, поведение коректно, как только попадаете за пределы памяти это ub
источник

P

Ponytale 🇷🇺 in pro.cxx
Vlad Serebrennikov
UB может выглядеть и как корректно работающий код
вот где здесь ub...
источник

RP

Roman Proskuryakov in pro.cxx
Ponytale 🇷🇺
вот где здесь ub...
Серьезно?
источник

VS

Vlad Serebrennikov in pro.cxx
Ponytale 🇷🇺
вот где здесь ub...
array + i
источник

AG

Andrey Glebov in pro.cxx
Тут получается out-of-bounds array access:
(array + i) не валидно если i > N, где N - размер массива.
какого массива? того, что получился в выражении array[0]
а это массив типа int[5]
источник

RP

Roman Proskuryakov in pro.cxx
Взять 15 элементов из массива длины в 5?
источник

P

Ponytale 🇷🇺 in pro.cxx
Roman Proskuryakov
Серьезно?
дап
источник

P

Ponytale 🇷🇺 in pro.cxx
и снова не увидел ничего криминального
источник

VS

Vlad Serebrennikov in pro.cxx
Ilia Abernikhin
ub это дословно не определенное поведение, до тех пор пока вы итерируетесь в пределах выделеной памяти, поведение коректно, как только попадаете за пределы памяти это ub
как упрощение такая логика может сойти, но поведение определено иначе в expr.add#4.2
источник

IA

Ilia Abernikhin in pro.cxx
с точки зрения формальной логики, этот код кошмарен, ужасен и так далее, но с точки зрения компилятора полностью легален, пока array + i в пределах куска памяти выделеного под array[N][M]
источник

VS

Vlad Serebrennikov in pro.cxx
Ponytale 🇷🇺
и снова не увидел ничего криминального
чуть выше расписали, как поведение этого выражения становится неопределенным
источник

P

Ponytale 🇷🇺 in pro.cxx
Vlad Serebrennikov
чуть выше расписали, как поведение этого выражения становится неопределенным
совершенно конкретный пример, все константы определены. вот зойчем придумывать небылицы-то?
источник

VS

Vlad Serebrennikov in pro.cxx
Ilia Abernikhin
с точки зрения формальной логики, этот код кошмарен, ужасен и так далее, но с точки зрения компилятора полностью легален, пока array + i в пределах куска памяти выделеного под array[N][M]
еще раз: поведение кода, который вы написали, в стандарте определено сложнее, чем вы себе представляете
источник

VS

Vlad Serebrennikov in pro.cxx
Ponytale 🇷🇺
совершенно конкретный пример, все константы определены. вот зойчем придумывать небылицы-то?
если для вас это все небылицы, то на этом и сойдемся
источник

AG

Andrey Glebov in pro.cxx
Суть UB не в потенциальном падении или неизвестных значениях объектов.
Суть UB в его невозможности в валидной программе.
В данном случае компилятор может быть уверен, что случится не больше пяти итераций цикла. Либо size <= 5, либо operator<< кинет исключение.
Ещё, к массивам array[1] и array[2] заведомо никто доступа не получает, а значит их не надо занулять.
источник

P

Ponytale 🇷🇺 in pro.cxx
Andrey Glebov
Суть UB не в потенциальном падении или неизвестных значениях объектов.
Суть UB в его невозможности в валидной программе.
В данном случае компилятор может быть уверен, что случится не больше пяти итераций цикла. Либо size <= 5, либо operator<< кинет исключение.
Ещё, к массивам array[1] и array[2] заведомо никто доступа не получает, а значит их не надо занулять.
шиза...
источник

ПК

Побитый Кирпич... in pro.cxx
Либо так, либо оверхед
источник

RP

Roman Proskuryakov in pro.cxx
источник

RP

Roman Proskuryakov in pro.cxx
почитайте про указатели в С++, что ли...
источник

AG

Andrey Glebov in pro.cxx
забавно, я как раз пошёл искать эту статью)
источник