Подтвердить что ты не робот

Может ли обучение C или С++ быть опасным для моего компьютера?

Есть ли такая вещь, как опасное знание, когда только начинаешь изучать С или C++? Другими словами, какова вероятность того, что я мог бы "случайно" написать и скомпилировать фрагмент кода, который форматирует жесткий диск, делает ОС непригодным для использования или худший случайный сценарий беззвучно удаляет случайные файлы на компьютере?

Материал, похожий на настоящий

формат C:/

или

rm -rf/

Если я только начинаю возиться с низкоуровневым кодом C или даже возиться с библиотеками, то какие основные вещи нужно знать?

Если есть на самом деле эти потенциальные опасности, скрывающие то, что является хорошей стратегией для сохранения среды разработчиков, изолированной от вашей повседневной системы? Являются ли определенные области переделаны лучше, чем виртуальная среда?

Не нужно входить в явные примеры кода, но более общие советы - это то, что мне интересно.

Я полагаю, что хорошее эмпирическое правило: убедитесь, что у вас есть понимание кода, прежде чем компилировать и запустить некоторый фрагмент кода, который вы найдете в Интернете.

Примечание: Я на OS X, если это актуально.

Я понимаю, что нет хорошей системы резервного копирования. Взломайте уничтожить свой компьютер, в лучшем случае вы теряете работу в течение дня или часа и должны восстанавливаться.

4b9b3361

Ответ 1

Нет

В операционной системе уже есть защита от ошибочных программ. Мы говорим, что C "опасно" просто означает, что он имеет необработанные указатели и массивы.

Эти вещи делают C и С++ близкими к аппаратным, быстрым и экономичным, но они позволяют программе C сбивать что-то случайное в своей собственной памяти. Его собственная память, а не любая другая программа. Это не повредит память, она просто меняет то, что делает одна программа на C... обычно она прерывается.

Вы не можете случайно повредить что-либо, если вы не выполняете что-то, что было бы столь же опасно, если бы вы набрали в командной строке, скажем, "rm -rf", переданный в system(3) из вашей программы.

Но вы можете создать опасную команду ОС на любом языке. На самом деле, это еще проще сделать на более новых "высокоуровневых" языках.

Ответ 2

Вы можете разбить ваш компьютер в расстройстве, но, кроме этого, я думаю, что с вами все будет в порядке.:)

Ответ 3

Несколько лет назад на моем 386 я учился писать низкоуровневую кодировку видеокарты на C, и я, должно быть, испортился, потому что вместо того, чтобы писать в специальный регистр VGA, я попал в звуковую карту, и я сделал мой компьютер максимально - странно кричащий шум. Полностью испугал меня! Это было все еще безопасно, но я узнал ценный урок. С силой приходит ответственность. По характеру использования языка, такого как C или С++, вы, естественно, хотите взаимодействовать с вашим ПК /WorkStation/OS на более низком уровне, чтобы принять последствия.
Вот почему многие современные ОС имеют доступ "Супервизор" и "Пользовательский уровень". Если вы ДЕЙСТВИТЕЛЬНО хотите ввернуть свой компьютер, тогда поиграйте с DDK

== Редактировать == Просто вспомнил еще один. Несколько лет назад я работал с каким-то специальным оборудованием и имел одну из первых плат прототипов. Я тестировал новый звуковой чип, так что выбил быстрый код и отправил его, а затем услышал массивную поп-музыку и наблюдал за тем, что казалось медленным, когда конденсатор взорвался и послал его содержимое, мчащее к моему глазу. К счастью, он просто пропустил мою голову на дюйм. Кто говорит, что C-кодирование не плохо для вашего здоровья!

Ответ 4

Если у вас есть разумные разрешения, установленные в вашей ОС X, вам не нужно беспокоиться о случайных удалениях.

Однако, как только вы перейдете с земли пользователя на землю ядра, становится возможным даже испортить ваше оборудование.

Выяснить возможные опасности развития земельных участков:

  • Переписывание секторов жесткого диска.

  • Повреждение памяти в других процессах, вызывающее неожиданное поведение.

  • Управление оборудованием с неожиданными последствиями. (Возможно, это может привести к тому, что плохо спроектированные аппаратные средства могут перегреться, сломаться или переписать прошивку с тарабарщиной).

Эти проблемы могут быть устранены при запуске на виртуальной машине.

Ответ 5

если вы действительно волнуетесь, Виртуализировать! Сомневаюсь, что вы случайно ввернете что-то в LEARNING С++, но если это вас успокоит вниз, запустить виртуальный компьютер и сделать все, что вам нужно.

Ответ 6

Да

Специально для клавиатуры. На прошлой неделе я сломал свою команду, неоднократно ударяя головой об этом, исправляя ошибки в 2D-платформерной игре.

Ответ 7

Нет, это не проблема. C и С++, как и все другие языки программирования, имеют дело с тем, что происходит в вашей программе, на процессоре. Конечно, вы можете сделать системный вызов, который форматирует ваш жесткий диск, но "форматировать жесткий диск" не является частью языка С++. Обычный багги-код просто сбой (или, когда вам не повезло, не сбой и просто ведет себя странно)

В этом отношении он не более опасен, чем Java, Python или любой другой язык. Все они позволяют выполнять системные вызовы, которые могут вызвать проблемы. Но пока вы остаетесь "внутри" языка, играя с конструкциями, определяемыми языком (функциями, классами, указателями, циклами и т.д.), Самое худшее, что может случиться, это то, что вы испортили свою собственную программу.

Ответ 8

Единственная проблема заключается в том, чтобы заставить демонов поддержать ваш нос, когда они ушли.

Ответ 9

Если вы не вошли в систему с правами root, вы не можете нанести большой вред своему компьютеру.

Ответ 10

Пока вы не совершаете прямые системные вызовы, это, вероятно, так, если вы просто изучаете C, тогда вы не будете наносить никакого реального ущерба. Если вы просто пишете ваниль C и придерживаетесь стандартной библиотеки, то самое худшее, что вы можете сделать, это удалить один файл, но вы должны сознательно вызвать функцию, чтобы сделать это.

Позвольте мне сказать так: если бы было легко уничтожить вашу систему во время обучения C, я бы поставил по крайней мере дюжину из комиссии в первый год обучения.

Ответ 11

Честно говоря, я думаю, вы ответили на свой вопрос, когда сказали, что это хорошая идея, чтобы проверить/понять код, который вы запускаете из Интернета. Если вы купите себе респектабельную книгу, например Язык программирования C, вероятность того, что вы допустили ошибку, достаточно серьезную, чтобы полностью уничтожить ваш компьютер, никто. Вам действительно нужно знать, что вы донг, чтобы написать код, который разрушает вашу систему. Вы далеко скорее всего случайно rm -rf/при запуске от имени root или установите какую-то плохую библиотеку, которая влияет на стабильность системы.

С другой стороны, я настоятельно рекомендую изучать C до изучения С++. В противном случае вы потратите свое время на изучение C, не имея возможности понять понятия объектно-ориентированного программирования.

Ответ 12

Когда я учился в колледже, этот парень называл себя репетитором, который узнал об этом от парня, который называет себя учителем, который говорил всем не использовать рекурсию, потому что вы могли бы взорвать свой стек и разрушить память своего компьютера.

Так очень неправильно!

Современные операционные системы достаточно хорошо защищают вас от излишней глупости. Вы должны в значительной степени быть злонамеренными и знать, как обойти безопасность ОС. Ваш другой вопрос вызывает некоторые опасения для меня в этом отношении... возможно, в этом случае корреляция не предполагает причинности?