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

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

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

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

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

33 ответов

20 просмотров

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...

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

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта