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

Глупый вопрос: Может ли стек пойнтер двигаться при выходе из блока

в каком-либо сишном компиляторе(gcc особенно интересует).

Иными словами, является ли вот этот код валидным?
void foo() {
int* ptr;
if (true) {
int val = 4;
ptr = &val;
}
}

Раньше был уверен что только при выходе из функции, а сейчас...

33 ответов

27 просмотров

UB

является, провисшие указатели не запрещены. Но после if-а разыменовать указатель нельзя

ptr хранит адрес val. Со значением ptr не происходит ничего.

работает но это UB

Асадбек Низомов
работает но это UB

и компилятор предупреждать будет

Это код валидный.

d7d1cd
Это код валидный.

.... потому что он не делает ничего

Mikail Bagishov
является, провисшие указатели не запрещены. Но по...

Ну и на самом деле, с движением стек поинтера это никак не связано. С точки зрения стандарта разыменовывать поинтер после ифа все равно нельзя, а с точки зрения "наиболее прямой трансляции в машинный код" ты его сможешь разыменовать независимо от того, когда RSP двигается

Асадбек Низомов
А что ?

Ничего. Это просто код, который ничего не делает. Если ты взял адрес объекта, который потом сдох, но не попытался узнать что по этому адресу находится, то это не запрещено. Я знаю адрес дома, который снесли, но не пойду в этот дом.

Асадбек Низомов
Ну это значит UB

Здесь нет никакой неопределённости

Может. Некоторые компиляторы на х86 выделяли место под локальные переменные ровно на момент их использования. Даже если сейчас такого нет, то все равно в твоем примере обращение по ptr будет UB (но в текущем куске UB пока нет).

Асадбек Низомов
Ну это UB

Ладно, уговорил. Для тебя компилятор будет делать исключение в таких случаях 😂

d7d1cd
Ладно, уговорил. Для тебя компилятор будет делать ...

отсутствие поведения = неопределенность

Anton
отсутствие поведения = неопределенность

Дык до разадресации нет никакого ub

там вообще ничего нет, в этом и неопределенность

Anton
там вообще ничего нет, в этом и неопределенность

Ага. Программист не написал программу, казалось бы, ничего нет, ан нихрена - UB 😂😂😂

Anton
там вообще ничего нет, в этом и неопределенность

В стандарте нет такого понятия как "неопределенность".

d7d1cd
В стандарте нет такого понятия как "неопределеннос...

программа - это определенное поведение, а ее отсутствие - неопределенное

Anton
программа - это определенное поведение, а ее отсут...

А если без околофилософских рассуждений? Пункт стандарта покажете?

d7d1cd
Ничего. Это просто код, который ничего не делает. ...

тащемта, ты после сноса и адреса не знаешь. значение указателя в конце функции не определено (что не запрещает его существование, но это более сильное ограничение, чем "нельзя разыменовать")

Georgy Firsov
Может. Некоторые компиляторы на х86 выделяли место...

А вот Resharper для тривиальных типов уверен в обратном🤔

Dmitriy [Отпуск]
А вот Resharper для тривиальных типов уверен в обр...

Не упоминай это нечто😅 Я больше к тому, что компиль может так делать. Лично видел сгенеренный асм как раз такой, но компиль уже не вспомню

Dmitriy [Отпуск]
Любопытно. Там не было alloca каких-нибудь?

Да нет, как раз sub rsp, <нужное кол-во байт> в рамках одной функции И add соответственно

3.27 [defns.undefined] undefined behavior behavior for which this document imposes no requirements [Note 1 to entry: Undefined behavior may be expected when this document omits any explicit definition of behavior

Anton
3.27 [defns.undefined] undefined behavior behavior...

Применительно к примеру тами поведение есть присваивается указателю адрес и оно определено

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта