Size: a a a

2021 March 14

AG

Andrey Glebov in pro.cxx
Stepan
А откуда взята информация о запрете вычисления? Это же обычная операция сложения. Другое дело - это доступ к этим данным.
если конкретно про UB, то тут: https://eel.is/c++draft/expr.add#4.3
источник

SK

Stas Koynov in pro.cxx
Anton
именно это и не определено. это и есть UB
да я вас умоляю, кто вам это запрещает. тогда бы все memset-ы и т.п код просто бы не работал!
источник

RP

Roman Proskuryakov in pro.cxx
Ilia Zviagin
Ты вообще в курсе что в С нет возможности передать многомерный массив в функцию, и только с помощью такого вот трюка и можно его обрабатывать.


Никакого UB тут нет
ну и хорошо.
источник

A

Anton in pro.cxx
Stas Koynov
да я вас умоляю, кто вам это запрещает. тогда бы все memset-ы и т.п код просто бы не работал!
memset делают на каждый вложенный массив отдельно
источник

SK

Stas Koynov in pro.cxx
Andrey Glebov
если конкретно про UB, то тут: https://eel.is/c++draft/expr.add#4.3
там написано иначе!. иначе, это если мы вышли за пределы массива! это UB. если мы  слишком обноглели нам ОСь даст по зубам через сигфолт.
источник

IZ

Ilia Zviagin in pro.cxx
Roman Proskuryakov
ну и хорошо.
Что хорошо то?
источник

D

Dmitriy in pro.cxx
Stas Koynov
там написано иначе!. иначе, это если мы вышли за пределы массива! это UB. если мы  слишком обноглели нам ОСь даст по зубам через сигфолт.
Или не даст)
источник

ПК

Побитый Кирпич... in pro.cxx
Stas Koynov
там написано иначе!. иначе, это если мы вышли за пределы массива! это UB. если мы  слишком обноглели нам ОСь даст по зубам через сигфолт.
или компилятор переделает наш код в return true;
источник

SS

Sergey Skvortsov in pro.cxx
Stas Koynov
да я вас умоляю, кто вам это запрещает. тогда бы все memset-ы и т.п код просто бы не работал!
Вы вроде столько лет эту идею продвигаете, ещё не надоело?)
Код с UB работает прямо сейчас в конкретном примере != UB нет
источник

SK

Stas Koynov in pro.cxx
Dmitriy
Или не даст)
я сказал если сильно. иногда за счет выравнивания нам дают больше памяти чем мы просили
источник

IZ

Ilia Zviagin in pro.cxx
Anton
memset делают на каждый вложенный массив отдельно
Можно делать и целиком
источник

VS

Vlad Serebrennikov in pro.cxx
Ilia Zviagin
Ты вообще в курсе что в С нет возможности передать многомерный массив в функцию, и только с помощью такого вот трюка и можно его обрабатывать.


Никакого UB тут нет
арифметика указателей не разрешает «ходить» по частям многомерного массива

если очень хочется, то можно считать, что оно работает так же, как работало создание объектов через malloc до 20 стандарта, но не более того
источник

AG

Andrey Glebov in pro.cxx
Stas Koynov
там написано иначе!. иначе, это если мы вышли за пределы массива! это UB. если мы  слишком обноглели нам ОСь даст по зубам через сигфолт.
да нет же, тут же речь не про разыменование такого указателя, а про выражение сложения указателя с числом
источник

A

Anton in pro.cxx
Ilia Zviagin
Можно делать и целиком
да можно делать и как в этом примере с UB
источник

IZ

Ilia Zviagin in pro.cxx
Vlad Serebrennikov
арифметика указателей не разрешает «ходить» по частям многомерного массива

если очень хочется, то можно считать, что оно работает так же, как работало создание объектов через malloc до 20 стандарта, но не более того
Разрешает
источник

IA

Ilia Abernikhin in pro.cxx
Vlad Serebrennikov
арифметика указателей не разрешает «ходить» по частям многомерного массива

если очень хочется, то можно считать, что оно работает так же, как работало создание объектов через malloc до 20 стандарта, но не более того
> арифметика указателей не разрешает «ходить» по частям многомерного массива

c чего бы?
источник

VS

Vlad Serebrennikov in pro.cxx
Ilia Zviagin
Разрешает
источник

ПК

Побитый Кирпич... in pro.cxx
Кстати, а разыменование nullptr это UB?
источник

VS

Vlad Serebrennikov in pro.cxx
толсто
источник

IA

Ilia Abernikhin in pro.cxx
Побитый Кирпич
Кстати, а разыменование nullptr это UB?
да
источник