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

Https://Godbolt.Org/Z/MeP533n8r Почему два указателя с одним адресом не равны?

36 ответов

5 просмотров

Может скажешь почему они должны быть равны?

Max-Kolesnikov Автор вопроса
Anatoly Shirokov
Может скажешь почему они должны быть равны?

If the pointers are pointers to object and represent the same address, they compare equal https://en.cppreference.com/w/cpp/language/operator_comparison

Max-Kolesnikov Автор вопроса
다니엘(줄리아)
UB

А можно пруф пожалуйста?

Max Kolesnikov
А можно пруф пожалуйста?

А на что по вашему указывает &x + 1 в общем случае?

Max-Kolesnikov Автор вопроса
다니엘(줄리아)
А на что по вашему указывает &x + 1 в общем случае...

А какая разница? Арифметика указателей вроде не запрещена. Указатель не был разыменован, не уверен в уб при попытке получить произвольный адрес

Max Kolesnikov
If the pointers are pointers to object and represe...

Первый из двух не pointer to the object, а past the end

Max-Kolesnikov Автор вопроса
Max Kolesnikov
Хммм... Past the end чего? Объекта?

Для этой части переменная не типа массива рассматривается как массив из одного элемента

Max Kolesnikov
Звучит логично, спасибо

Логика стандарта в этой части допускает сегментированную память и не обещает сравнение указателей, как и ничего не обещает про преобразование в uintptr_t

Max Kolesnikov
А какая разница? Арифметика указателей вроде не за...

Хорошо, оптимизатор компилятора исходит из того, что x и y это совершенно два разных объекта int, находящихся в совершенно разных областях памяти, и следовательно предполагается, что &x + 1 никогда не будет равен y и выполняется оптимизация сравнения

Max Kolesnikov
А какая разница? Арифметика указателей вроде не за...

Там сравнение, это аналогично разименованию. К тому же, с чего ты взял что - две автоматические переменные лежат в смежных адресах - адрес переменной, обыденной ранее, меньше. Ты не спец по комп. Безопасности случайно? Они всё какие...

Max-Kolesnikov Автор вопроса
Ilya Zviagin
Там сравнение, это аналогично разименованию. К т...

Сравнение с нулевым указателем тоже аналогично разыменованию нулевого указателя? Интересное заявление Я взял это с того, что они действительно лежат в смежных адресах, потому что проверено ассертом. Я не утверждал, что они *обязаны* лежать в смежных адресах, но в конкретном кейсе, где они лежат, указатели не оказывались не равны, хотя адреса совпадали И это уже объяснили более логично чем "да просто уб", так что мой запрос пруфов считаю оправданным

Max-Kolesnikov Автор вопроса
다니엘(줄리아)
Оптимизатор думает иначе, и все тут

Они и без оптимизатора не должны быть равны, уже выяснили

Max Kolesnikov
Сравнение с нулевым указателем тоже аналогично раз...

А это напрямую в стандарте есть, поэтому вот так...

Max-Kolesnikov Автор вопроса
Ilya Zviagin
А это напрямую в стандарте есть, поэтому вот так.....

И я почему-то странный, когда прошу ссылку на стандарт, ну

Max Kolesnikov
Сравнение с нулевым указателем тоже аналогично раз...

Они не аналогичны конечно, я имел в виду, что по эффекту выхода указателя за границы памяти объекта они аналогичны. В смысле UB UB. Кстати, сравнивать два указателя на разные объекты на что-то кроме == тоже нельзя

Max-Kolesnikov Автор вопроса
Ilya Zviagin
Они не аналогичны конечно, я имел в виду, что по э...

Насколько я знаю, выход за границы чего-либо указателем уб не является, только разыменование такого указателя

Max Kolesnikov
Насколько я знаю, выход за границы чего-либо указа...

такой указатель даже нельзя сформировать, не то что разыменовать http://eel.is/c++draft/expr.add#4.3

Max-Kolesnikov Автор вопроса
Max-Kolesnikov Автор вопроса
다니엘(줄리아)
Так это логично было

Нет, это так не работает в C++

Max-Kolesnikov Автор вопроса
다니엘(줄리아)
Так это логично было

Как бы логично не казалось, важно только то как это описано/не описано в стандарте

Max Kolesnikov
Как бы логично не казалось, важно только то как эт...

стандарт это лишь формулировки некой коллективной C++ mental model, которые достаточно точны и непротиворечивы, чтобы быть утвержденными это не значит, что они хорошо отражают изначальную идею или покрывают все крайние случаи. поэтому mental model за стандартом как минимум не менее важна, чем сам текст

Max Kolesnikov
Вот, то что надо. Спасибо большое!

Ну извини, я вот лично гулял с телефоном, не мог тебе так быстро ссылку на стандарт прислать... Но так — CPR гораздо лучше. https://en.cppreference.com/w/cpp/language/operator_comparison

Vlad
стандарт это лишь формулировки некой коллективной ...

Вот чё написал? ЧТО МОЖЕТ БЫТЬ ВАЖНЕЕ СВЯТЕЙШЕГО СТАНДАРТА и пророка его Стровстропа ?

Ilya Zviagin
Вот чё написал? ЧТО МОЖЕТ БЫТЬ ВАЖНЕЕ СВЯТЕЙШЕГО С...

Баги компилятора и не до конца реализованный стандарт

Раз уж пошла пьянка про указатели и спецификаторы к ним Можно заткнуть компилятор добавив спецификатор volatile к указателям В таком случае компилятор не имеет права трогать программу

Max Kolesnikov
UB останется

UB останется, но компилятор заткнется

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
22
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
а не подскажете вот это скрин из какой IDE ?
Iluha Companets
14
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Сегодня у себя обнаружил Holodeck-2_8_0.exe (48.5 Mb). Вопрос: откуда он у меня взялся?
楽園松本
8
Народ всем привет Подскажите, как включить самописные dll библиотеки в итоговую сборку Сейчас при запуске dev сервера локально формируется папка build, из которой запускается...
Андрей
4
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Карта сайта