По поводу обращения к неинициализированной переменной в С/С++: на сколько помню курс по С из универа - при объявлении переменнрой определенного типа за ней резирвируется место в оперативной памяти нужного размера. Но для оптимизации и ускорения выполнения значение, которое уже записано в этой области, не очищается (так, кстати, много где работает - это поведение, в частности, является причиной нашумевшей в одно время уязвимости Spectr для кучи процов Интел и немного АМД). В итоге если попробовать в программе на С обратится к такой переменной - она выдаст значение, которое было записано в памяти ранее - то есть какой-то мусор. При том оно вообще может не быть "полноценным" значением - возможно это кусок от какого-то более длинного типа
2:33 Решение. Откройте Dev Tools в браузере (копка F12), вкладка "консоль". Наберите строку помеченную префиксом " >" нажмите Enter. Результат исполнения одна строка ниже: > let a = {} + []; undefined >console.log(a); [object Object]
Если в си создается переменная, но не инициализируется, то программа просто выделяет ячейку памяти под переменную, при этом не затирая эту ячейку памяти, что в этой ячейке хранилось раньше - неизвестно ни кому, там может быть и ноль, может быть и кусок строки и т.д, поэтому переменные в си нужно всегда инициализировать. Массив в языке си это указатель на первый элемент массива, а так как в си не запрещена матеамтика с указателями, то их можно и складывать и вычитать и по сути i[5] это прибавить к указателю число 5 - то есть сдвинуть на 5 элементов по массиву. Таким образом можно пройтись по чужим данным в памяти или вообще слить дамп оперативки. Так распаковывают запакоавнные программы для взлома - просто берут дамп памяти и ищут точку входа приложения, обрезают дамп и груба говорю распакованный экзешник у вас в руках, это очень мощный инструмент, но при неправильном использовании можно и систему в синий экран легко загнать, если не читать дамп а записать туда что то за пределами своей выделенной памяти. аким же образом ищутся значения для читов в играх, просто в оперативке ищется значение количества золота например и правится, прямо в оперативке прямо во время игры. Сейчас эти данные кодируют для защиты от такого, но найти все равно можно, если знаешь, что искать. Cоветую так же задаться вопросом nil==nil ?
Хм... ну то что плюсы дают подобное вытворять, это же всё отдается на откуп программисту. А вот например уже для той же много поточности в разных языках есть свои методы синхронизации потоков исполнения, те же критические секции, симафоры, и т.д. И вроде питон умеет выполняться только в одном потоке разве нет? JavaScript - это JavaScript тут сложно что-то говорить) Ты не достаточно задушнил) Есть такая штука, точнее свод правил, MISRA, там такую хрень с наименованием ещё на этапе написания кода исключают ) Ну всё можно открывать окно.
0:57 Тут нет не чего удивительного. Значение False в базе своей соответствует числу ноль, True любому числу отличному от нуля. Именно поэтому в большинстве языков мы можем подавать чиста в if() и получать логичное поведение. В аппаратной разработке зачастую так и делают, используя числа за место True и False. 3:10 Тут тоже нет не чего удивительного. И компилятор сам значение неинициализированной переменной не присваивает (во всяком случае не всегда). Видите ли, каждая переменная располагается по определённому адресу, по которому уже могло быть какое-то значение, которое осталось от использование другими программами. Именно поэтому неинициализированные переменные чему-то равняются. По этой же причине при выходе за пределы массива мы получаем случайные (или неслучайные) значения.
Ну так в джава скрипте и поэтому и есть === а надчет == то я наоборот этим пользуюсь к примеру в ситуации когда нужно проверить на 3 значения: 1 undefined 2 null 3 0 Переменную которую мы получаем может быть undefined, null, 0, number (больше 0) и поэтому просто к перемене использую || и ставлю значение по умолчанию тоесть 1, и всё так что не баг а фича) Пример херня, конечно но удалять лень)
Ну да у всех у всех компилируемый в языках такие проблемы они не сообщают там мелочи всякие вот мелочей ошибки поэтому придётся попотеть Это не касается не только си и си плюс плюс это касается и даже java тоже такие проблемы
JavaScript может даже умножить строку на число ну например 5 х 1 пять будет строка и один будет число он выводит пять это очень странно почему он прибавляет друг другу разные типы данных кто понимает отвечайте мне
у gcc ловил ошибку, писал прошивку под одну железку, и одна функция ни как не хотела работать правильно, хотя я раз 20 перепроверил алгоритм, но не работает и всё, плюнул, решил, что потом или разберусь или перепишу и начал писать вывод данных на дисплей, забив на функционал, и вообще не трогал странно ведущий себя кусок кода и при проверки дисплея оказалось, что кусок кода заработал как надо! я обрадовался, и продолжил писать дальше, и при разных компилляциях этот кусок кода то работал то не работал! мистика. в итоге проблему решил, перенастроив мейк файл, что бы прошивка компилировалась не на максимальную скорость выполнения, а на минимальный обьём занимаемого флеша - и всё! больше этот кусок кода ни разу не глючил, что бы я в прошивке не менял.
По поводу обращения к неинициализированной переменной в С/С++: на сколько помню курс по С из универа - при объявлении переменнрой определенного типа за ней резирвируется место в оперативной памяти нужного размера. Но для оптимизации и ускорения выполнения значение, которое уже записано в этой области, не очищается (так, кстати, много где работает - это поведение, в частности, является причиной нашумевшей в одно время уязвимости Spectr для кучи процов Интел и немного АМД). В итоге если попробовать в программе на С обратится к такой переменной - она выдаст значение, которое было записано в памяти ранее - то есть какой-то мусор. При том оно вообще может не быть "полноценным" значением - возможно это кусок от какого-то более длинного типа
мдэээ, малютка мабильщик узнал про базу спустя 3 года
ну, как факт, для того чтоб на работу попасть особо много знать не нужно
и курсы уже продает, все по канонам )
Чел рассказывает про выход за пределы памяти, обосновывая это "магией". Сразу видно, собесы на сеньора тянем
или многопоточность в пайтоне, в котором GIL) ахахаха
О) Автор узнал, что 0 - это False. Загадки природы не иначе))
2:33 Решение. Откройте Dev Tools в браузере (копка F12), вкладка "консоль". Наберите строку помеченную префиксом " >" нажмите Enter. Результат исполнения одна строка ниже:
> let a = {} + [];
undefined
>console.log(a);
[object Object]
Если в си создается переменная, но не инициализируется, то программа просто выделяет ячейку памяти под переменную, при этом не затирая эту ячейку памяти, что в этой ячейке хранилось раньше - неизвестно ни кому, там может быть и ноль, может быть и кусок строки и т.д, поэтому переменные в си нужно всегда инициализировать. Массив в языке си это указатель на первый элемент массива, а так как в си не запрещена матеамтика с указателями, то их можно и складывать и вычитать и по сути i[5] это прибавить к указателю число 5 - то есть сдвинуть на 5 элементов по массиву. Таким образом можно пройтись по чужим данным в памяти или вообще слить дамп оперативки. Так распаковывают запакоавнные программы для взлома - просто берут дамп памяти и ищут точку входа приложения, обрезают дамп и груба говорю распакованный экзешник у вас в руках, это очень мощный инструмент, но при неправильном использовании можно и систему в синий экран легко загнать, если не читать дамп а записать туда что то за пределами своей выделенной памяти. аким же образом ищутся значения для читов в играх, просто в оперативке ищется значение количества золота например и правится, прямо в оперативке прямо во время игры. Сейчас эти данные кодируют для защиты от такого, но найти все равно можно, если знаешь, что искать. Cоветую так же задаться вопросом nil==nil ?
О, новая душная рубрика с неожиданным поворотом в конце!
Выражаю своё наидушнейшее одобрение 🐳
5:07 поверил что TH-cam зависим,даже перезагрузил его 😂
Хм... ну то что плюсы дают подобное вытворять, это же всё отдается на откуп программисту. А вот например уже для той же много поточности в разных языках есть свои методы синхронизации потоков исполнения, те же критические секции, симафоры, и т.д. И вроде питон умеет выполняться только в одном потоке разве нет?
JavaScript - это JavaScript тут сложно что-то говорить)
Ты не достаточно задушнил)
Есть такая штука, точнее свод правил, MISRA, там такую хрень с наименованием ещё на этапе написания кода исключают ) Ну всё можно открывать окно.
Карен Макарен хорошо зашёл, но только одной ногой
0:57 Тут нет не чего удивительного. Значение False в базе своей соответствует числу ноль, True любому числу отличному от нуля. Именно поэтому в большинстве языков мы можем подавать чиста в if() и получать логичное поведение. В аппаратной разработке зачастую так и делают, используя числа за место True и False.
3:10 Тут тоже нет не чего удивительного. И компилятор сам значение неинициализированной переменной не присваивает (во всяком случае не всегда). Видите ли, каждая переменная располагается по определённому адресу, по которому уже могло быть какое-то значение, которое осталось от использование другими программами. Именно поэтому неинициализированные переменные чему-то равняются. По этой же причине при выходе за пределы массива мы получаем случайные (или неслучайные) значения.
я посмотрел, не удаляй, пусть другие досмотрят
Ну так в джава скрипте и поэтому и есть === а надчет == то я наоборот этим пользуюсь к примеру в ситуации когда нужно проверить на 3 значения:
1 undefined
2 null
3 0
Переменную которую мы получаем может быть undefined, null, 0, number (больше 0) и поэтому просто к перемене использую || и ставлю значение по умолчанию тоесть 1, и всё так что не баг а фича)
Пример херня, конечно но удалять лень)
Ну да у всех у всех компилируемый в языках такие проблемы они не сообщают там мелочи всякие вот мелочей ошибки поэтому придётся попотеть
Это не касается не только си и си плюс плюс это касается и даже java тоже такие проблемы
JavaScript может даже умножить строку на число ну например 5 х 1 пять будет строка и один будет число он выводит пять это очень странно почему он прибавляет друг другу разные типы данных кто понимает отвечайте мне
Эх сразу видно про многопоточку прям верхушечку коснулся, на деле если капнуть глубже, можно попасть в ад =)
Да, там можно было много чего рассказать, не стал усложнять 😅
А я думал что хороших компиляторов такие ошибки не бывает
у gcc ловил ошибку, писал прошивку под одну железку, и одна функция ни как не хотела работать правильно, хотя я раз 20 перепроверил алгоритм, но не работает и всё, плюнул, решил, что потом или разберусь или перепишу и начал писать вывод данных на дисплей, забив на функционал, и вообще не трогал странно ведущий себя кусок кода и при проверки дисплея оказалось, что кусок кода заработал как надо! я обрадовался, и продолжил писать дальше, и при разных компилляциях этот кусок кода то работал то не работал! мистика. в итоге проблему решил, перенастроив мейк файл, что бы прошивка компилировалась не на максимальную скорость выполнения, а на минимальный обьём занимаемого флеша - и всё! больше этот кусок кода ни разу не глючил, что бы я в прошивке не менял.
Тип данных decimal? Может проблема в «новых» программистах? Раньше задавали типы данных вручную, сейчас все рассчитывают на компилятор 🤦🏼♂️
14:48 Про того самого людишку из NASA
Новый способ заканчивать видосы на самом деле
1:18 не "типы данных к значениям", а наоборот...
00:00 Тоже сурдина и семихатова смотришь?
ты топчик, мативируешь (я учу руский, извините за ошибки)
Он выучил программирование что бы душить
А ты здесь ради добровольного удушения?
@@Angelochek-v8o Да.
"Необъяснимые странности" - 15 минут посредственно объясняет их
В смысле посредственно
Я нечего не понял
Print(0.1+0.2==0.3) //true
На питоне онлайн компилятор выдает false
@@dushnila_official потому что float != decimal типу данных, во флоуте по-другому числа записываются
@@dushnila_official странно как-то
I want to start trading cryptocurrencies but I don't know how to start. I want someone that will coach me to avoid loosing my capital.
start from dropping this shit thoughts mf
норм
Первый❤
Хорош
первый
Хорош
двадцатый , удаляй канал
первый
Не хорош