Maksym
Ну примешь и что будет?
Хорошая логика. Хрки из MeDoc также открывались докс файлы, который потом петю распространил. Ваще дурной паттерн бинари кидать. Если тебя это не волнует, то почему других не должно?
Anonymous
бред
Maksym
100%
Maksym
добро пожаловать в интернет, в таком случае. Я закончил оффтопить, не баньте.
Vladislav
никакие не надо
Vladislav
исходники - пожалуйста
Vitaliy ◀️TriΔng3l▶️
Через Emscripten прогоняйте)
Anonymous
Сайт девелоперов. Рукалицо.
Anonymous
исходники - пожалуйста
Результат линковки тоже исходниками?
Vladislav
администрация чата - за безопасное программирование 👺
Nikita
Через Emscripten прогоняйте)
Мелтьдаунь!!! (Покачал пальцем подняв руку вверх)
Anonymous
администрация чата - за безопасное программирование 👺
С таким успехом можно не читать тут скатёрки кода и смотреть скрины. Вдруг мозг повредится.
Vladislav
нет, не с таким же
Anonymous
Но я всё равно теперь не буду
Vladislav
Igor
Кстати, кто-нибудь знает как убрать всякие проверки, что есть в mainCRTStartup? К примеру, компилируешь программу вида: int main() { return 0; }; в итоге в *.exe-шники куча проверок и т.п.
Поизучай как народ собирает 4k демки. http://iquilezles.org/code/isystem1k4k/isystem1k4k.htm - простейшие бинарники занимают ~1kb, правда там используется специализированный линкер crinkler с кучей интересных идей по сжатию бинарников (http://xoofx.com/blog/2010/12/28/crinkler-secrets-4k-intro-executable/).
Ivan
за тобой выехали представители майкрософт
Я понял, что там произошло. *b++ = 1 ==> *b = 1; ++b;
Oleg
но там b++
Aidar
но там b++
Это язык такой?
Ivan
Наверное опасность только при cout << *b; из-за сегфолта?
Andrey
Цитирую стандарт: Насчет b++ всё чисто: 5.7.4 For the purposes of these operators ( речь про ptr + integral), a pointer to a nonarray object behaves the same as a pointer to the first element of an array of length one with the type of the object as its element type. 5.7.5 ... if the expression P points to the last element of an array object, the expression (P)+1 points one past the last element of the array object ... If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined. Т.е. имеем b указывающий на первый элемент "массива" и b + 1, указывающий сразу за последним элементом.
Nikita
тут никто случаем не работал с OneDrive for Business api?
Matwey
Могу ли я разместить массив из одного байта по адресу 0xffffffff?
Matwey
На какой-то платформе
Matwey
Хотя там должен быть стек с той стороны, но тем не менее
Andrey
клево, я угадал
Правильно говорить: "чувствую стандарт на уровне подсознания"
Vladimir
На какой-то платформе
Да, на 64-битной платформе никаких проблем с 0xffffffff :)
Andrey
Могу ли я разместить массив из одного байта по адресу 0xffffffff?
Зависит от вашей квалификации. Но есть более простые способы выстрелить себе в ногу.
Matwey
Да, на 64-битной платформе никаких проблем с 0xffffffff :)
Мне лень с телефона писать больше буков, а вопрос все поняли.
Aidar
По-моему махвелью+1 не входит в понятие адрес уже
Aidar
А значит нет
Aidar
Ну или указатель что там
Andrey
Мне лень с телефона писать больше буков, а вопрос все поняли.
Я думаю, что нет. Лучше переформулировать, хотя бы описать проблему или обозначить итоговую цель.
Matwey
Я думаю, что нет. Лучше переформулировать, хотя бы описать проблему или обозначить итоговую цель.
If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined. <- вот это место не понятно. Для начала непонятно, кто должен гарантировать, что не будет переполнения.
Oleg
Стандарт, обв
Oleg
Но компиляторы пишут люди, так что я бы лучше не расчитывал
Matwey
Но тогда к чему комментарий про UB?
Andrey
Но тогда к чему комментарий про UB?
Это был комментарий про то что b++ как раз НЕ UB
Matwey
Это был комментарий про то что b++ как раз НЕ UB
the evaluation shall not produce an overflow; otherwise, the behavior is undefined. <- вот этот комментарий.
Andrey
Я до конца эту фразу не понимаю, возможны разночтения, что именно будет UB
Oleg
the evaluation shall not produce an overflow; otherwise, the behavior is undefined. <- вот этот комментарий.
Это значит, что у тебя не будет переполнения, но поведение не определено
Matwey
По причине otherwise, the behavior is undefined
Andrey
Oleg
В общем, если видишь где-то уб, то так не делай и будет тебе счастье
Matwey
Т.е. мне перед b++ нужно проверять адрес b на предмет переполнения?
Matwey
Ну это очевидно непрактично
Matwey
Странная фраза, короче, я её воспринимаю как "в случае когда поведение не определено - поведение не определено".
Igor
проверять результат malloc на 0 тоже непрактично, а что делать)
Matwey
Ну и зачем это писать было в стандарт?
Andrey
но для меня она звучит так: Для выражения (P + N) если оба значения и P, и (P + N) лежат в одном массиве (включая "сразу за массивом") то P < (P + N) (т.е. нет переполнения) Если условие "лежат в одном массиве" нарушается то это UB
Matwey
Спасибо
Matwey
Т.е. компилятор должен пообещать мне не размещать массивы вплотную к границе адресного пространства?
Matwey
А всегда оставлять там 'one past the last`
Andrey
Т.е. мне перед b++ нужно проверять адрес b на предмет переполнения?
Нет, проверять не надо. Но если ты напишешь if (P++ > P) то компилятор имеет полное право заменить на if (true)
Andrey
Т.е. компилятор должен пообещать мне не размещать массивы вплотную к границе адресного пространства?
Похоже на то. По крайней мере в разделе про итераторы есть явное указание что "past the last" больше любого адреса в массиве
Matwey
Хм, ну так вроде норм. Спасибо
Andrey
Могу ли я разместить массив из одного байта по адресу 0xffffffff?
Видимо правильно вопрос звучит так: "позволяет ли стандарт, что бы адрес char arr[1] был равен MAX_SIZE_T"?
Matwey
Видимо правильно вопрос звучит так: "позволяет ли стандарт, что бы адрес char arr[1] был равен MAX_SIZE_T"?
Ну можно так перефразировать. Что значит правильно или не правильно по отношению к вопросу - не знаю
Andrey
Исходя из того, что хотелось выяснить.
Matwey
Ну эдак любой вопрос можно редуцировать к ответу на этот вопрос. И вообще не задавать тогда.
Andrey
Не совсем. на ваш вопрос ответ "Да"
Andrey
Никто не мешает положить 0xffffffff в intptr_t, потом превратить в указатель на массив из одного char. только последствия не предсказуемы.
Python'еr
В прототипе функции(C) используется "константа"(определенная через define) в качестве названия аргумента, разве это допустимо? Будет ли она заменяться на выражение определенное в define?
Andrey
Если скомпилялось - значит допустимо
Alexander
Видимо правильно вопрос звучит так: "позволяет ли стандарт, что бы адрес char arr[1] был равен MAX_SIZE_T"?
а разве на char npt_arr; не будет работать то же самое правило про валидность указателя на один больше ++(&not_arr), и не получается ли тогда что вообще ничего не может быть размещено в самом конце?
Andrey
Лучше код через pastebin показать
Python'еr
препроцессор выполняет замены ДО компиляции
И? Будет ли он выполнять замену в этом случае? Это вообще допустимо?
Andrey
1. без кода сложно сказать 2. для чистого С вроде отдельный чат