Страницы

Поиск по вопросам

понедельник, 28 января 2019 г.

Различного вида критические ошибки в программировании

Обычно стараюсь все узнавать сам, но в последнее время начал мучать такой вопрос: "Может ли случиться такое, что из-за различного вида ошибок, допущенных программистом, система может, грубо говоря, нагнуться?"
Собственно, вопрос возник при чтении книги Джесса Либерти "Освой с++ за 21 день", в которой сказано, что блуждающие указатели могут повести себя по-разному, могут даже удалить файлы. И особенно сильно удивило то, что при присвоении некого значения массиву, который не содержит такого элемента, например, массив A содержит 5 элементов, и мы присваиваем значение 6 элементу, цитирую:
Ни в коем случае не запускайте эту программу у себя на компьютере, это может привести к поломке системы.
Правда ли это?


Ответ

Система может "нагнуться". Но если Вы пишите обычное приложение, не запускаете его с под администратора/рута, то "уложить" систему достаточно сложно - современные системы хорошо сопротивляются пользователю.
И особенно сильно удивило то что при присвоении некого значения массиву который не содержит такого элемента, например, массив A содержит 5 элементов и мы присваиваем значение 6 элементу, цитирую " Ни в коем случае не запускайте эту программу у себя на компьютере это может привести к поломке системы". Правда ли это?
О такой ошибке почти все компиляторы знают. И ничего плохого не случиться - компилятор выделит массив не на 5 элементов, а обычно как минимум на 6. А потом просто проверит, а не записал кто то за пределами массива. И если такое произошло - Вы об этом узнаете явно. (студия может явно ругнуться в консоль).
А вот если писать не в 6 элемент, а в 1000...000, вот тут может быть несколько ситуаций.
случайно перетрутся данные, которые принадлежат Вашей программе. Другие функции будут "удивлены". Одна из самых типичных ситуаций. перетрутся данные в "паддингах" - пустых местах между переменными. Ничего плохого не будет. случайные данные попытаются записать в защищенную область память - будет исключение и программа скорее всего закрешится.
То есть, максимум, что может случиться, это либо программа будет вести себя странно, либо просто упадет.
Могут ли "блуждающие указатели" удалить файл? могут. Но обычно эта логика в программе уже есть.
Если сильно боитесь эти ужасов, установите виртуальную машину и в ней все делайте. В худшем случае просто восстановите виртуальную машину. Выйти за пределы виртуальной машины ещё нужно постараться.

Комментариев нет:

Отправить комментарий