设为首页 加入收藏

TOP

6.1.4 未定义的行为
2013-10-06 23:55:06 来源: 作者: 【 】 浏览:59
Tags:6.1.4 定义 行为
6.1.4 未定义的行为
这是个潜伏在太多太多的代码中的大问题,而编写这种代码的人却以为知道自己在做什么。 任何时候当你在做C++(www.cppentry.com)标准没有提供要求的事情时,你就已经身处未定义行为的地带了。我经 常看见程序员为自己申辩,理由是他们测试过代码而且程序如预期的样子运行。那正是未定义 行为邪恶的方面。它之所以能够隐藏好多年,是因为没有什么东西去激发问题的出现。未定义 行为会危害真实系统的典型例子数不胜数。比方说,我曾经改编过一块十分昂贵的显卡上的 EPROM,实际上就是用了下面这样的程序:
我剥去了所有其他代码,并以这样的方式给函数命名,是为了说服即使最马虎的读者也永 远不要使用它。C程序员可以读懂这段代码做了什么,它在C++(www.cppentry.com)中也做了同样的事。简而言之, 它分配足够的局部存储区来存储下一个“No”,然后继续试图在相同的地方写“yes”。它为 “No”分配的空间存不下“yes”,所以最后一个字符会溢出。在许多系统上,那个溢出可能不 会带来实际的伤害。在我当时使用的系统上,它将数据写到函数返回地址的顶部。结果,函数 没有返回给调用者,而是返回到别的什么地方。不幸的是,它返回到的地方恰巧就是搞破坏的 可执行代码。当然,现代操作系统往往能侦测这样的野蛮行为,并简单地结束程序。但是:
警告!
程序员绝不能依赖于操作系统介入以保护自己的程序和其他程序,从而避免 具有未定义行为的代码所导致的后果。包含未定义行为的程序随时都可能导致事故的发生。
【责任编辑:雪花 TEL:(010)68476606-8007】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.1.3 未指定的行为 下一篇6.1.1 完全定义的行为

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: