1. Куча / Говнокод #19635

    +4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    program Project2;
    
    procedure test1;
    var
      arr:array[0..32] of char;
    begin
      fillchar(arr,sizeof(arr),'A');
    end;
    
    procedure test2;
    var
      arr:array[0..32] of char;
    begin
      fillchar(arr,sizeof(arr) div 2,'B');
      writeln(arr);
    end;
    
    begin
      test1;
      test2;
      //BBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA
      readln;
    end.

    http://ideone.com/qJajnb

    Запостил: fajes_rown, 15 Марта 2016

    Комментарии (123) RSS

    • И на паскале можно UB'ы ловить :)
      Ответить
      • Writeln не знает, сколько в массиве значащих символов, поэтому выводит все. А стековые переменные Паскаль не инициализирует, поэтому в незаполненных элементах массива можно подглядывать за старым содержимым стека.

        Разве это UB? На мой взгляд это вполне ожидаемое поведение.
        Ответить
        • > стековые переменные Паскаль не инициализирует...
          ... поэтому использовать их значения без инициализации - самый настоящий UB.
          Ответить
          • UB — это полагаться на их значения. А если я нарочно хочу посмотреть, что там было в стеке?
            Ответить
            • А вдруг там память, которая взрывается, если из неё читать неинициализированные байты?
              Ответить
              • Смотри-ка, тебя минусуют. Наверное, проснулся Царь, который в #13162 запилил лямбды, основанные на доступе к старому содержимому стека через неинициализированные переменные.
                Ответить
                • Ну ок, ок, не UB это даже по сишным меркам. Просто мусор.

                  If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate.
                  Ответить
                  • Какая тонкая сишкоблядская грань.
                    Сертифицированный компилятор при обращении к переменной может возвращать мусор, однако не имеет права отформатировать диск.
                    Ответить
                    • Ага, грань там очень тонкая.
                      char* p;
                      char* q = p; // Ok, just unspecified
                      char c = *q; // Ok, let's format hard drive...
                      If an invalid value has been assigned to the pointer, the behavior of the unary * operator is undefined.
                      Ответить
                      • Разыменование мусорного указателя?
                        Ответить
                      • А тут может сработать защита, если страница недоступна для чтения. Или если память отображается на порты ввода-вывода...
                        Ответить
                      • Кстати, а как правильно писа́ть: behavior или behaviour?
                        Ответить
                        • its undefined too
                          Ответить
                          • No, it's unspecified.

                            Use of an unspecified value, or other behavior where this International Standard provides
                            two or more possibilities and imposes no further requirements on which is chosen in any
                            instance
                            Ответить
                            • No, it's implementation-defined.

                              For Yankees normal behaviour is to write “behavior”, while for British normal behavior is to write “behaviour”.
                              Ответить
                              • Глагол не на месте.
                                Ответить
                                • Меня не только глагол беспокоит. Тут либо нужно склеивать несколько слов в словосочетание, чтобы всё, что перед глаголом, было одним членом предложения, а именно подлежащим (British's normal behavior или normal behavior of British), либо отделять запятой вводные слова (но я не знаю типичных вводных оборотов в английском, а гуглить было лень).
                                  Ответить
                      • в первом случае может просто мусорок скопироваться или быть фолт (если адрес не сможет нормально развиртуализоваться)

                        во втором случае у адреса есть микроскопичейский но все же шанс попасть на шину и вызвать чтение из какого-то устройства
                        а там уже как бог пошлет
                        Ответить
                        • вызвать чтение из устройства которое при чтении взрывается
                          Ответить
                          • Защита от реверсинга?
                            Ответить
                            • Например)

                              Вообще чтение же часто имеет сайдэффект. Кажется, i8042 не обрабатывал новые нажатия пока ты не считаешь с него сканкод
                              Ответить
                              • > чтение же часто имеет сайдэффект
                                Особенно из USB (чтение кидает запрос "есть чо?").
                                Ответить
                          • > устройство, которое при чтении взрывается
                            Коран?
                            Ответить
                    • 50 оттенков серого:

                      undefined behavior
                      unspecified behavior
                      implementation-defined behavior
                      Ответить
                    • The behavior is undefined in the following circumstances:
                      <...>
                      - An unmatched ' or " character is encountered on a logical source line during tokenization.
                      - The identifier _ _func_ _ is explicitly declared.


                      Бойся сишных компиляторов. Они даже за незакрытую кавычку яйца отстрелят.
                      Ответить
                    • И на закуску:

                      The characters ', \, ", //, or /* occur in the sequence between the < and > delimiters, or the characters ', \, //, or /* occur in the sequence between the " delimiters, in a header name preprocessing token

                      #include <some\library\header.h>, как любят писать виндузятники...
                      Ответить
                      • Пиздец.

                        #include < /* а почему нельзя тут комментировать?*/ stdio.h >
                        Ответить
                      • The character sequence in an #include preprocessing directive does not start with a letter

                        #include <1.h> // BOOM!
                        Ответить
                    • имеет! Смотри:

                      int i; // так случилось что i = 122342
                      (*(*int)i) = 42;

                      А на этом компьютере по адресу 122342 расположен MMIO дискового контроллера, который при записи туда числа 42 форматирует диск согласно спецификации своего протокола
                      Ответить
                • старому содержимому стока.

                  основным свойством лямбд является возможность педерачи их как аргументов или длительного хранения в переменной.
                  стек за это время может 100500 раз перетереться
                  Ответить
                  • Это очень смешная тема, на самом деле)
                    Что случается с автоматической переменной которую захватила кложа после того, как стек опустошили?

                    В некоторых языках она копируется в кложу, но тогда она readonly.
                    В частности в жабе надо её явно final делать.
                    В объективных сях она (с ключ словом block) улетает в кучу и реально превращается в указатель
                    В шарпике не помню как, надо читат
                    Ответить
                    • >Это очень смешная тема, на самом деле)
                      Да, тема нетривиальная.

                      >Что случается с автоматической переменной которую захватила кложа после того, как стек опустошили?

                      А тут интересный вопрос. Можно смотреть если лямбда убегает со стека, то только тогда двигать её в кучу. А если создали переменную и лямбду на стеке, передали в какой-то [1,2,3].each() и тут же выбросили, то смысла срать в кучу нет.

                      >В частности в жабе надо её явно final делать.

                      В жабе всё страшно. Переменная неявно становится членом замыканияанонимного класса.


                      Там свои нюансы в виде повышенного использования памяти при использовании анонимных инициализаторов.
                      new HashMap(){{
                      //ОСТОРОЖНО! захватывает переменные
                         put(1,2);
                         put(1,2);
                      }}
                      Ответить
                      • >Переменная неявно становится членом замыканияанонимного класса.
                        А где не так?
                        Ответить
            • > А если я нарочно хочу посмотреть, что там было в стеке?

              Тогда это хацкирство, а не серьезное программирование.
              Это как я в sqlе использовал union для неявной сортировки. Благо оно не сломалось, а ведь могло!

              Зато я слышал истории людей у который в оракле так же красно-чёрный GROUP BY сортировал, а потом эти гады запилили вместо него хэши и случился небольшой пиетет.
              Ответить
              • С этого момента, пожалуйста, поподробнее.
                Ответить
                • Ну чтобы смерджить 2 таблицы и найти дубли оно сначала сортирует вывод, а потом дубли идут один за другим - их легко удалить.

                  Лет 10 назад в базы кроме B-Tree начали активно впиливать хэши. И делать соответствующие оптимизации.
                  Это как складывать уникальные в хешмап.
                  Ответить
                  • ну тоесть люди завязались на UB, и получили хуем по лбу

                    сами себе дураки
                    Ответить
          • послушайте

            прекратите называть автоматические переменные стековыми
            это же не грамотно!
            Ответить
    • Это не UB.
      Ответить
      • А что это?
        Ответить
        • Ожидаемое поведение. Если переписать на C и юзать memset, в выхлопе точно то же самое будет.
          Ответить
          • А если я какую-нибудь переменную между вызовами опишу, сможешь ли ты это гарантировать?
            Ответить
            • Да UB это в самом чистом и первозданном виде - документацией неопределенно что должно возвращаться в данном случае.
              Ответить
              • См. выше. За UB можно диск отформатировать или автору хуй отстрелить. А тут всего лишь значение не определено, а не поведение.
                Ответить
                • поведение неопределенного значение тоже неопределенно. Если оно сейчас не отрезает тебе хуй, это не значит, что нельзя написать компилятор по всем докам так, что бы оно не отрезало тебе хуй при попытке обратится к неопределенному значению
                  Ответить
                • ох уж эти программисты

                  Если каждый раз после того как ты ешь манную кашу у тебя из жопы вылезает белый кролик - то это нормально, хоть в учебнике по анатомии ничего такого нет. А если этот кролик пытается отгрызть тебе хуй - это уже UB и повод сходить к практологу
                  Ответить
            • Будет краш, т.к. стек очистится.
              Ответить
              • > краш
                Пресвятая наивность...
                Ответить
                • По всем правилам должен быть краш. Но почему-то его нет. Очевидно, за доступ к неинициализированной (но выделеной) памяти не казнят, а жаль. UB тоже не получилось.
                  Ответить
                  • > за доступ к неинициализированной (но выделеной) памяти не казнят
                    Это архитектура просто неудачная. Если какую-нибудь ECC память заюзать и помечать этими лишними битами инициализированность...
                    Ответить
                    • >>ECC
                      ты же сейчас про реальный режим говоришь, да?

                      потому что если про защищенный то ты реальне считаешь что обращение по адресу 0xуйзнаетгде успешно пройдет MMU, попадет в читабельную страницу с пометкой "в памяти", не найдется в кеше, и контроллер памяти попытается её считать и только чексумма ECC профейлится?
                      Ответить
                      • Я именно про защищённый. Большая часть кучи же замапана, но не выделена или уже освобождена. Вот в отлове таких областей и была идея.

                        Проблемы с кешем решаемы - мы же свою рахитектуру пилим. Кеш тоже придётся сделать с флажком "не инициализированно".

                        А лишний бит от ецц - просто как способ хранения этих флажков. Чтобы и память не пришлось редизайнить.
                        Ответить
                        • >>ольшая часть кучи же замапана
                          а TLB резиновый??

                          >>мы же свою рахитектуру пилим
                          чтото я перестал тебя понимат

                          >>А лишний бит от ецц - просто как способ хранения этих флажков.

                          чексумму у ECC проверяет контроллер памяти (или даже IO logic у DIMM), до проца эта информация просто не дойдет
                          Ответить
                          • Короче идея такая была - добавить к каждому байту бит инициализированности. А в проц - инструкцию clear и прерывание по чтению еинициализированной фигни.
                            Ответить
                            • ого, ты только что придумал страничную адресацию с размером страницы в 1 байт

                              удобно
                              Ответить
                  • по правилам должен быть УБ
                    будет ли это краш или нет -- зависит от окружения и процессора

                    1) где-то почти всегда будет краш (mac os)
                    2) где-то -- как повезет (ms-dos)
                    Ответить
    • Мне кажется, или кто-то здесь испытывает недостаток кислорода?!
      Ответить
      • Мне кажется, или тут переизбыток тупых твинков?
        Ответить
        • Пшшш... пшшш... пи-пи-пи-пи-пи... пи-пип пип пип... пиииииииии
          Детектор тупых твинков зашкалило. Гипотеза о переизбытке тупых твинков подтверждена.
          Ответить
          • Граждане! Сохраняйте спокойствие! Часть из нас - ненастоящие люди! Двери плотно заперты. Я уверен в том, что я, 1024--, Борманд и Грэй - настоящие, поэтому дробовики будут у нас. Начнем веселье!
            Ответить
            • А я как же я. Я не могу быть не настоящим.
              Ответить
            • Эй, эй, я тоже человек! Дайте дробовик!
              Ответить
              • докажи!
                Ответить
                • Я, gost, находясь в здравом уме и твердой памяти, торжественно заявляю:
                  Я настоящий!
                  Ответить
                  • Николай, ебаните своему твинку в голову из дробовика
                    Ответить
                    • НиколЯщ?
                      Ответить
                      • ГДЕ? СТРЕЛЯЙ В НЕГО!!!
                        Ответить
                      • кстати мульт в тему

                        http://xn-----vlcbbirqlhw.xn--p1ai/all-seasons/2-season/vspomnit-veh-seh-jjo-2-sezon-4-seriya
                        Ответить
                        • > xn-----vlcbbirqlhw.xn--p1ai
                          Отличное название домена. Запоминающееся...
                          Ответить
                          • Ешь что дают
                            Ответить
                            • Мне ещё надо анимцо про космоняшек досмотреть, TAP state machine до конца реализовать и Робинзона Крузо дочитать... Так что сорри, некогда.

                              З.Ы. Я 90% ссылок на ролики не открываю, т.к. ролики - линейная хуйня, которую нельзя по диагонали прочитать... Текст или картинки в этом отношении намного удобней...
                              Ответить
                              • "рик и морти" всяко лучше твоего анимца. я гарантирую
                                Ответить
                                • Даже если так - есть ещё 2 более приоритетных задачи ;)
                                  Ответить
                                  • обычно задачи, которые якобы приоритетные, болтаются там уже не первую неделю
                                    Ответить
                                    • > болтаются там уже не первую неделю
                                      Это потому что дедлайн не проставлен.
                                      Ответить
                                      • это потому что они не имеют никакой реальной ценности

                                        Имхо возраст у тебя не тот. что бы Робинзона Крузо читать. Мне кажется это такое, подростковое, не залетит.
                                        Ответить
                                        • > возраст у тебя не тот
                                          Да почему, норм читается. Я просто в детстве его почему-то пропустил...
                                          Ответить
                                          • тебе какого нибудь Толстого да Достоевского бы...

                                            Достоевский хорош. Даром что не фантаст, и то читал
                                            Ответить
                                            • > Толстого
                                              Too hard. Нечитабельно. Или ты про другого Толстого, который про гиперболоид писал?

                                              > Достоевский хорош.
                                              Да, но я вроде всё интересное у него уже читал.

                                              З.Ы. Мне уроки литературы напрочь отбили интерес к классике. Уже столько лет прошло, а до сих пор аж страшно открывать эти книжки...
                                              Ответить
                                              • Ну в школе говорили что существует мифический возраст с которого Война и мир перестает быть занудной херней.

                                                Из Достоевского очень понравился Идиот

                                                Имхо в школе еще нечего не понимаешь, а тебе такие умные книжки впихивают. Классику надо в осознанном возрасте читать
                                                Ответить
                                                • > в осознанном возрасте
                                                  И ты это говоришь человеку, который спит с дакимакурой...
                                                  Ответить
                                                  • Что поделать - одиночество - чума 21 века

                                                    А я так и не заказал. обнимаю обычную подушку
                                                    Ответить
                                                  • После этого на меня еще кто-то будет пиздеть из-за найденного компа?
                                                    Ответить
                                                    • Просто удобная подушка. Ну и я вроде не писал, что я её нашёл на помойке...
                                                      Ответить
                                            • Доставучий уныл.
                                              Ответить
                                • Лол, так вот кто мне его советовал первый раз.
                                  Ответить
                                  • ты так говоришь, как будто наконец-то взял и посмотрел
                                    Ответить
                                    • > взял и посмотрел
                                      Ну, я с того разговора в недавнем треде так ничего и не посмотрел. Ни рика ни няшек.
                                      Ответить
                                      • что же ты смотришь за ужином?
                                        ты вообще человек?
                                        Ответить
                                        • За ужином надо смотреть что-то?
                                          Ответить
                                          • конечно
                                            не еду же разглядывать

                                            ох уж эти люди, которые не прожили лучше годы своей молодости в общаге
                                            Ответить
                                        • > что же ты смотришь за ужином?
                                          Тарелку с едой. Иногда ГК листаю на планшетке.

                                          > ты вообще человек?
                                          Вошь ли я, как все, или человек? Смогу ли я переступить или не смогу! Осмелюсь ли нагнуться и взять или нет? Тварь ли я дрожащая или право имею...
                                          Ответить
                                  • Хуйни не посоветую
                                    Ответить
                              • > Робинзона Крузо дочитать

                                Прочти содержание. В смысле, заголовки всех глав. В принципе, этого достаточно. Хотя и полное название спойлит всё.
                                Ответить
                                • Ага. Такой то спойлер прямо на первых страницах...
                                  Ответить
                              • ролики это стримеры современности
                                их можно только стримом читать
                                Ответить
                        • http://xn------------D.SPUDRO.SPARDE/all-seasons/2-season/vspomnit-veh-seh-jjo-2-sezon-4-seriya
                          Ответить
                • Да вот те крест!
                  Ответить

    Добавить комментарий