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

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

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

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

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

33 ответов

24 просмотра

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

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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Карта сайта