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

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

36 ответов

14 просмотров

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

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 останется, но компилятор заткнется

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта