的时候偶然间发现了书中源代码潜在的错误

villager 2003-09-29 10:47:40
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;

上面这行代码是该书中常用的消息处理方式。当GetMessage函数调用失败的时候会返回-1。这个时候while循环的条件就成了:

while(-1) ;

编译出来的应用程序会出现致命错误!大家来想一想怎么来去掉这个潜在的错误。
...全文
75 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2003-09-30
  • 打赏
  • 举报
回复
不管怎么说,这确实是个问题,因为既然是错误,最好做特殊处理,以免引起更严重的问题。
我同意jeckyz(深圳)的方案。
XBug 2003-09-30
  • 打赏
  • 举报
回复
关注
fireseed 2003-09-30
  • 打赏
  • 举报
回复
to villager(为什么我这么绝顶聪明 却还是菜鸟?) 有技术问题可以讨论,但请不要骂人,说脏话。

我不知道你的编译环境是怎么设置的……

/* 以下代码在VC.net环境下编译通过,并正常运行 */
/* Creamdog保留所有权力 */

#include <iostream>
using namespace std;

void main( void )
{
while( -1 )
{
}
system( "pause" );
}
fireseed 2003-09-30
  • 打赏
  • 举报
回复
to villager(为什么我这么绝顶聪明 却还是菜鸟?) 有技术问题可以讨论,但请不要骂人,说脏话。

我不知道你的编译环境是怎么设置的……

/* 以下代码在VC.net环境下编译通过,并正常运行 */
/* Creamdog保留所有权力 */

#include <iostream>
using namespace std;

void main( void )
{
while( -1 )
{
}
system( "pause" );
}
villager 2003-09-30
  • 打赏
  • 举报
回复
别的环境不知道,Win32下的HelloWin一定会出错。这是MSDN上就说过的。严禁直接使用GetMessage()放在while里的。
villager 2003-09-30
  • 打赏
  • 举报
回复
试一试while(-1)会出现什么结果!~!!!!

不试就没有发言权。那个奶奶狗。我管你是不是版主。
jeckyz 2003-09-30
  • 打赏
  • 举报
回复
// Start the message loop.

while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

fireseed 2003-09-30
  • 打赏
  • 举报
回复
请villager(为什么我这么绝顶聪明 却还是菜鸟?) 自重,切莫引起争吵

谢谢合作!
fireseed 2003-09-30
  • 打赏
  • 举报
回复
while(-1)

我想不出有什么问题……

while后面跟的是一个bool值,而按照C++语义,标准数据类型转换规则,从其它类型转为bool时,0是false,非0是true
villager 2003-09-30
  • 打赏
  • 举报
回复
觉得不对就直说。

别像个太监一样阴阳快气的
villager 2003-09-30
  • 打赏
  • 举报
回复
楼上那位什么意思???
feiyingw 2003-09-30
  • 打赏
  • 举报
回复
为自作聪明干杯
villager 2003-09-30
  • 打赏
  • 举报
回复
VC6有问题,可能是编译器的问题。
skywinner 2003-09-29
  • 打赏
  • 举报
回复
GetMessage does not remove WM_PAINT messages from the queue. The messages remain in the queue until processed.

Note that the function return value can be TRUE, FALSE, or -1. Thus, you should avoid code like this:

while (GetMessage( lpMsg, hWnd, 0, 0)) ...


The possibility of a -1 return value means that such code can lead to fatal application errors.

上面是delphi里的帮助文件中的
villager 2003-09-29
  • 打赏
  • 举报
回复
while (GetMessage(&msg, NULL, 0, 0) > 0)

怎么样?
软件编程规范培训实例与练习 软件编程规范培训实例与练习  问题分类 1 逻辑类问题(A类)-指设计、编码出现的计算正确性和一致性、程序逻辑控制等方面出现的问题,在系统起关键作用,将导致软件死机、功能正常实现等严重问题; 接口类问题(B类)-指设计、编码出现的函数和环境、其他函数、全局/局部变量或数据变量之间的数据/控制传输不匹配的问题,在系统起重要作用,将导致模块间配合失效等严重问题; 维护类问题(C类)-指设计、编码出现的对软件系统的维护方便程度造成影响的问题,在系统不起关键作用,但对系统后期维护造成不便或导致维护费用上升; 可测试性问题(D类)-指设计、编码因考虑不周而导致后期系统可测试性差的问题。  处罚办法 问题发生率: P=D/S D=DA+0.5DB+0.25DC 其: P -问题发生率 D -1个季度内错误总数 DA -1个季度内A类错误总数 DB -1个季度内B类错误总数 DC -1个季度内C类错误总数 S -1个季度内收到问题报告单总数 1)当D≥3时,如果P≥3%,将进行警告处理,并予以公告; 2)当D≥5时,如果P≥5%,将进行罚款处理,并予以公告。 目 录 一、逻辑类代码问题 第5页 1、变量/指针在使用前就必须初始化 第5页 【案例1.1.1】 第5页 2、防止指针/数组操作越界 第5页 【案例1.2.1】 第5页 【案例1.2.2】 第6页 【案例1.2.3】 第7页 【案例1.2.4】 第8页 3、避免指针的非法引用 第9页 【案例1.3.1】 第9页 4、变量类型定义错误 第10页 【案例1.4.1】 第10页 5、正确使用逻辑与&&、屏蔽&操作符 第17页 【案例1.5.1】 第17页 6、注意数据类型的匹配 第18页 【案例1.6.1】 第18页 【案例1.6.2】 第18页 7、用于控制条件转移的表达式及取值范围是否写正确 第20页 【案例1.7.1】 第20页 【案例1.7.2】 第21页 【案例1.7.3】 第22页 8、条件分支处理是否有遗漏 第24页 【案例1.8.1】 第24页 9、引用已释放的资源 第26页 【案例1.9.1】 第26页 10、分配资源是否已正确释放 第28页 【案例1.10.1】 第28页 【案例1.10.2】 第29页 【案例1.10.3】 第30页 【案例1.10.4】 第32页 【案例1.10.5】 第33页 【案例1.10.6】 第35页 【案例1.10.7】 第38页 11、防止资源的重复释放 第39页 【案例1.11.1】 第39页 12、公共资源的互斥性和竞用性 第40页 【案例1.12.1】 第40页 【案例1.12.2】 第40页 二、接口类代码问题 第43页 1、对函数参数进行有效性检查 第43页 【案例2.1.1】 第43页 【案例2.1.2】 第43页 【案例2.1.3】 第44页 【案例2.1.4】 第46页 【案例2.1.5】 第47页 【案例2.1.6】 第48页 2、注意多出口函数的处理 第49页 【案例2.2.1】 第49页 三、维护类代码问题 第51页 1、 统一枚举类型的使用 第51页 【案例3.1.1】 第51页 2、 注释量至少占代码总量的20% 第51页 【案例3.2.1】对XXX产品BAM某版本部分代码注释量的统计 第51页 四、产品兼容性问题 第52页 1、系统配置、命令方式 第52页 【案例4.1.1】 第52页 【案例4.1.2】 第53页 2、设备对接 第54页 【案例4.2.1】 第54页 3、其他 第55页 【案例4.3.1】 第55页 五、版本控制问题 第58页 1、新老代码同一全局变量不一致 第58页 【案例5.1.1】 第58页 六、可测试性代码问题 第59页 1、调试信息/打印信息的正确性 第59页 【案例6.1.1】 第59页 一、逻辑类代码问题 1、变量/指针在使用前就必须初始化 【案例1.1.1】 C语言最大的特色就是指针。指针的使用具有很强的技巧性和灵活性,但同时也带来了很大的危险性。在XXX的代码有如下一端对指针的灵活使用: ... ... _UC *puc_card_config_tab; ... ... Get_Config_Table(
网络安全技术概述全文共8页,当前为第1页。网络安全技术概述全文共8页,当前为第1页。网络安全技术概述 网络安全技术概述全文共8页,当前为第1页。 网络安全技术概述全文共8页,当前为第1页。 1.引言 随着网络的迅速发展,网络的安全性显得非常重要,这是因为怀有恶意的攻击者窃取、修改网络上传输的信息,通过网络非法进入远程主机,获取储存在主机上的机密信息,或占用网络资源,阻止其他用户使用等。然而,网络作为开放的信息系统必然存在众多潜在的安全隐患,因此,网络安全技术作为一个独特的领域越来越受到全球网络建设者的关注。 一般来说,计算机系统本身的脆弱性和通信设施的脆弱性再加上网际协议的漏洞共同构成了网络的潜在威胁。随着无线互联网越来越普及的应用,互联网的安全性又很难在无线网上实施,因此,特别在构建内部网时,若忽略了无线设备的安全性则是一种重大失误。 2.网络攻击及其防护技术 计算机网络安全是指计算机、网络系统的硬件、软件以及系统的数据受到保护,不因偶然或恶意的原因遭到破坏、泄露,能确保网络连续可靠的运行。网络安全其实就是网络上的信息存储和传输安全。 网络的安全主要来自黑客和病毒攻击,各类攻击给网络造成的损失已越来越大了,有的损失对一些企业已是致命的,侥幸心里已经被提高防御取代,下面就攻击和防御作简要介绍。 2.1常见的攻击有以下几类: 2.1.1入侵系统攻击 网络安全技术概述全文共8页,当前为第2页。网络安全技术概述全文共8页,当前为第2页。此类攻击如果成功,将使你的系统上的资源被对方一览无遗,对方可以直接控制你的机器。 2.1.2缓冲区溢出攻击 程序员在编程时会用到一些不进行有效位检查的函数,可能导致黑客利用自编写程序来进一步打开安全豁口然后将该代码缀在缓冲区有效载荷末尾,这样当发生缓冲区溢出时,从而破坏程序的堆栈,使程序转而执行其它的指令,如果这些指令是放在有root权限的内存,那么一旦这些指令得到了运行,黑客就以root权限控制了系统,这样系统的控制权就会被夺取,此类攻击在LINUX系统常发生。在WINOOWs系统下用户权限本身设定不严谨,因此应比在LINUX系统下更易实现。 2.1.3欺骗类攻击 网络协议本身的一些缺陷可以被利用,使黑客可以对网络进行攻击,主要方式有:IP欺骗;ARP欺骗;DNS欺骗;Web欺骗;电子邮件欺骗;源路由欺骗;地址欺骗等。 2.1.4拒绝服务攻击 通过网络,也可使正在使用的计算机出现无响应、死机的现象,这就是拒绝服务攻击,简称DoS(DenialofService)。 分布式拒绝服务攻击采用了一种比较特别的体系结构,从许多分布的主机同时攻击一个目标,从而导致目标瘫痪,简称DDoS(DistributedDenialofService)。 2.1.5对防火墙的攻击 网络安全技术概述全文共8页,当前为第3页。网络安全技术概述全文共8页,当前为第3页。防火墙也是由软件和硬件组成的,在设计和实现上都不可避免地存在着缺陷,对防火墙的攻击方法也是多种多样的,如探测攻击技术、认证的攻击技术等。 2.1.6利用病毒攻击 病毒是黑客实施网络攻击的有效手段之一,它具有传染性、隐蔽性、寄生性、繁殖性、潜伏性、针对性、衍生性、不可预见性和破坏性等特性,而且在网络其危害更加可怕,目前可通过网络进行传播的病毒已有数万种,可通过注入技术进行破坏和攻击。 2.1.7木马程序攻击 特洛伊木马是一种直接由一个黑客,或是通过一个不令人起疑的用户秘密安装到目标系统的程序。一旦安装成功并取得管理员权限,安装此程序的人就可以直接远程控制目标系统。 2.1.8网络侦听 网络侦听为主机工作模式,主机能接受到本网段在同一条物理通道上传输的所有信息。只要使用网络监听工具,就可以轻易地截取所在网段的所有用户口令和帐号等有用的信息资料。 等等。现在的网络攻击手段可以说日新月异,随着计算机网络的发展,其开放性、共享性、互连程度扩大,网络的重要性和对社会的影响也越来越大。计算机和网络安全技术正变得越来越先进,操作系统对本身漏洞的更新补救越来越及时。现在企业更加注意企业内部网的安全,个人越来越注意自己计算机的安全。可以说:只要有计算机和网络的网络安全技术概述全文共8页,当前为第4页。网络安全技术概述全文共8页,当前为第4页。地方肯定是把网络安全放到第一位。 网络有其脆弱性,并会受到一些威胁。因而建立一个系统时进行风险分析就显得尤为重要了。风险分析的目的是通过合理的步骤,以防止所有对网络安全构成威胁的事件发生。因此,严密的网络安全风险分析是可靠和有效的安全防护措施制定的必要前提。网络风险分析在系统可行性分析阶段就应进行了。因为在这阶段实现安全控制要远比在网络系统运行后采取同样的控制要节约的多。即使认为当前的网络系统分析建立的十分完善,在建立安全防护时,风险分析

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧