关于“脏数据”和“多次调用”

脏数据

上午花了挺长时间调试C中的一个简单的函数调用,程序总是出现一些奇怪的行为。经过分析和调试终于发现了问题,原来是程序读了“脏数据”。还记得杨老师上课时反复强调过这个问题,结果还是犯了那个错误。看来编程必须要动手是句大实话。

“脏数据”是在使用一个已被销毁的数据的地址时出现的问题。尤其是在函数中利用函数的局部变量对一个指针进行赋值后,又利用这个指针去取相应的局部变量时,最容易出现“脏数据”。原因是当这个函数执行结束后,其中的局部变量所在的存储空间已被“清栈”,所以那个指针指向的那块内存已被别的数据所覆盖,就形成了“脏数据”。

 

使用传指针方式来修改数据时容易出现“脏数据”,避免的办法是牢记传指针的目的是修改指针指向那块内存的内容,而不是指针本身。


多次消息调用

每一次消息都会调用WndProc,每一个WndProc都是崭新的。因此,若要使在A消息下计算得到的结果被B消息使用,那么需将这个数据设置为持久的(static)。这里的持久是指函数层面的持久。

 

也许C中的static指的是时间的范围,作用域指的是具体的范围。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值