学习C或C ++会对我的电脑造成危险吗?

时间:2009-09-13 22:50:08

标签: c++ c

刚开始学习C或C ++时,是否存在危险知识这样的事情?换句话说,我有可能“意外地”编写和编译格式化硬盘驱动器的代码片段,使操作系统无法使用,或者更糟糕的情况下静默删除计算机上的随机文件?

像名副其实的

格式C:/

rm -rf /

如果我刚刚开始修改低级C代码甚至搞乱库,那么需要注意哪些基本事项?

事实上,这些潜在的危险潜伏着什么是保持开发环境沙盒的日常系统的好策略?某些修补区域是否更好地留给虚拟化环境?

不需要进入明确的代码示例,但更一般的建议是我很好奇的。

我认为一个好的经验法则是:在编译并运行一些在网络上找到的随机代码片段之前,请确保您已了解代码。

注意: 如果相关,我在OS X上。

我认识到一个好的备份系统是无可替代的。黑客攻击破坏你的计算机,最多你失去一天或几小时的工作并且必须恢复。

12 个答案:

答案 0 :(得分:44)

操作系统已包含针对错误程序的保护。我们说C是“危险的”只是意味着它有原始指针和数组。

这些东西使C和C ++接近硬件,快速且节省内存,但它们确实允许C程序在其自己的内存中随机破坏某些内容。 它的自己的记忆,而不是任何其他程序。这不会损坏内存,只会改变一个C程序所做的事情......通常会中止。

除非你在命令行输入一些同样危险的东西,比如从程序中传递给system(3)的“rm -rf”,否则你不会意外地伤害任何东西。

但是你可以用任何语言产生危险的OS命令。实际上,使用较新的“高级”语言更容易

答案 1 :(得分:24)

你可能会沮丧地粉碎你的电脑,但除此之外,我认为你会没事的。 :)

答案 2 :(得分:9)

多年前在我的386上,我正在学习用C语言编写低级视频卡编码而且我一定搞砸了,因为我没有写入特定的VGA寄存器,而是打了声卡而我的电脑做得最开心 - 尖叫声。完全吓坏了我!它仍然是安全的,但我学到了宝贵的一课 - 力量带来了责任 根据使用C或C ++等语言的性质,您自然希望在较低级别与PC / WorkStation / OS进行交互,以便接受后果。
这就是为什么许多现代操作系统具有“主管”和“用户”级访问权限的原因。如果您真的想要将PC拧紧,那么请使用DDK

==编辑== 只记得另一个。几年前,我正在使用一些定制硬件,并拥有第一个原型板之一。我正在测试新的声音芯片,所以敲了一些快速的代码然后发送它然后我听到了一个巨大的流行音乐,看着像电容器一样的慢动作,并发送它的内容冲向我的眼睛。幸运的是,它只是错过了我的头。谁说C编码对你的健康没有坏处!

答案 3 :(得分:7)

特别是键盘。上周,我在一场2D平台游戏中修复了这些错误,反复敲打我的脑袋,打破了我的行为。

答案 4 :(得分:6)

如果您在OS X上设置了合理的权限,则无需担心意外删除。

但是,一旦你从用户端到核心域,你甚至可以搞砸你的硬件。

详细说明内核土地开发的可能危险:

  1. 覆盖硬盘行业。

  2. 在其他进程中破坏内存,导致意外行为。

  3. 控制硬件意外后果。 (有可能导致设计不良的硬件过度加热,破坏或重写固件并带有乱码)。

  4. 可以通过在虚拟机中运行来消除这些问题。

答案 5 :(得分:6)

如果你真的很担心,Virtualize!我怀疑你是否会意外地搞砸了学习C ++的东西,但是如果它让你冷静下来,那么就运行一台虚拟计算机并完成所有开发工作。< / p>

答案 6 :(得分:5)

不,这不是问题。与所有其他编程语言一样,C和C ++处理程序中CPU上发生的事情。当然你可以进行系统调用来格式化你的硬盘,但“格式化硬盘”不是C ++语言的一部分。普通的错误代码只是崩溃(或者,当你运气不好时,不会崩溃,只是表现得很奇怪)

在这方面,它并不比Java,Python或任何其他语言更危险。所有这些都允许您进行可能引起麻烦的系统调用。但是只要你保持语言的“内部”,使用语言定义的结构(函数,类,指针,循环,等等),最糟糕的情况就是你破坏了你自己的程序。

答案 7 :(得分:3)

唯一的问题是,一旦他们出门,让恶魔重新站起来。

答案 8 :(得分:1)

老实说,当你说验证/理解你从网上运行的代码时,我认为你回答了自己的问题。如果你给自己买了一本像The C Programming Language这样值得尊敬的书,那么你犯错误的可能性就足以完全摧毁你的计算机了。你真的必须知道你要写什么来破坏你的系统。当你以root身份运行或安装某种影响系统稳定性的坏库时,你更容易意外rm -rf /。

另外,我强烈建议在学习C ++之前学习C语言。否则,您将花费时间学习C而无法理解面向对象编程的概念。

答案 9 :(得分:1)

如果没有以root身份登录,则不会对您的计算机造成太大伤害。

答案 10 :(得分:1)

只要你没有进行直接的系统调用,如果你刚刚学习C就可能就是这种情况,那么你就不会做任何真正的伤害。如果您只是编写vanilla C并坚持使用标准库,那么您可以做的最糟糕的事情是删除单个文件,但您必须故意调用该函数来执行此操作。

让我这样说吧:如果在学习C的过程中很容易破坏你的系统,那么在我学习它的第一年里,我已经至少放了十几个。

答案 11 :(得分:0)

当我在大学时,有一个人称自己是一名导师,他从一个自称是老师的人那里学到了这一点,这告诉大家不要使用递归,因为你可能会炸掉你的筹码并破坏你的计算机内存。 / p>

非常错!

现代操作系统可以很好地保护您免于过于愚蠢。你必须有目的地恶意并且知道如何绕过操作系统的安全性。在这方面,你的另一个问题确实引起了我的一些担忧......也许在这种情况下,相关性并不意味着因果关系?