现在的位置: 首页 > 综合 > 正文

请在使用前,初始化它

2012年11月13日 ⁄ 综合 ⁄ 共 599字 ⁄ 字号 评论关闭

标题没写完整,在此补充:请在使用变量前,初始化它!

这是显而易见的,有很多人却经常忘记初始化。在C#中,如果一个变量不经初始化,连编译都通不过。

今天在调试程序时,在某个类A中加了一句变量定义语句,编译Release版本,运行,程序某功能不工作了!切换到Debug版本,运行又正常。

怪事年年有,今年特别多。我仅仅添加了一句类变量的定义,没有其它任何代码,Release版本程序运行却变得不正常!去掉那句类变量定义,一切又恢复正常。

有果必有因,程序不会无缘无故发脾气。经过巨大的跟踪工作(代码非我所写),终于查出,有两个类变量在使用前没有初始化,想当然的把它认为是零。事实上不总是。

经分析,VC编译器对于类变量,有以下两点:

1. Debug版本中,默认初始化为零值(0或NULL或FALSE)

2. Release版本中,不再进行默认零值初始化,所以初始值是一个内存值(不确定的伪随机值)

事实上,在Release版本中,类变量的内存值经常是零。这就造成了一个严重的假象:类变量不用初始化,默认为零。这种假象很难进行调试而发现问题。我不知道微软为什么在Debug版本中把类变量默认初始化为0,而Release版本中又奉行另一套。两个版本不一致,会造成一些很奇怪的问题,至少表面上如此。

今天所遇到的现象再一次给我一个忠告:请在使用变量前,初始化它!否则,你会遇上一些莫名其妙的问题,而解决这些问题,代价可能不会小。

抱歉!评论已关闭.