脏数据
上午花了挺长时间调试C中的一个简单的函数调用,程序总是出现一些奇怪的行为。经过分析和调试终于发现了问题,原来是程序读了“脏数据”。还记得杨老师上课时反复强调过这个问题,结果还是犯了那个错误。看来编程必须要动手是句大实话。
“脏数据”是在使用一个已被销毁的数据的地址时出现的问题。尤其是在函数中利用函数的局部变量对一个指针进行赋值后,又利用这个指针去取相应的局部变量时,最容易出现“脏数据”。原因是当这个函数执行结束后,其中的局部变量所在的存储空间已被“清栈”,所以那个指针指向的那块内存已被别的数据所覆盖,就形成了“脏数据”。
使用传指针方式来修改数据时容易出现“脏数据”,避免的办法是牢记传指针的目的是修改指针指向那块内存的内容,而不是指针本身。
多次消息调用
每一次消息都会调用WndProc,每一个WndProc都是崭新的。因此,若要使在A消息下计算得到的结果被B消息使用,那么需将这个数据设置为持久的(static)。这里的持久是指函数层面的持久。
也许C中的static指的是时间的范围,作用域指的是具体的范围。