请在使用前,初始化它
来源:互联网 发布:php自定义加密 编辑:程序博客网 时间:2024/05/16 23:08
标题没写完整,在此补充:请在使用变量前,初始化它!
这是显而易见的,有很多人却经常忘记初始化。在C#中,如果一个变量不经初始化,连编译都通不过。
今天在调试程序时,在某个类A中加了一句变量定义语句,编译Release版本,运行,程序某功能不工作了!切换到Debug版本,运行又正常。
怪事年年有,今年特别多。我仅仅添加了一句类变量的定义,没有其它任何代码,Release版本程序运行却变得不正常!去掉那句类变量定义,一切又恢复正常。
有果必有因,程序不会无缘无故发脾气。经过巨大的跟踪工作(代码非我所写),终于查出,有两个类变量在使用前没有初始化,想当然的把它认为是零。事实上不总是。
经分析,VC编译器对于类变量,有以下两点:
1. Debug版本中,默认初始化为零值(0或NULL或FALSE)
2. Release版本中,不再进行默认零值初始化,所以初始值是一个内存值(不确定的伪随机值)
事实上,在Release版本中,类变量的内存值经常是零。这就造成了一个严重的假象:类变量不用初始化,默认为零。这种假象很难进行调试而发现问题。我不知道微软为什么在Debug版本中把类变量默认初始化为0,而Release版本中又奉行另一套。两个版本不一致,会造成一些很奇怪的问题,至少表面上如此。
今天所遇到的现象再一次给我一个忠告:请在使用变量前,初始化它!否则,你会遇上一些莫名其妙的问题,而解决这些问题,代价可能不会小。
- 请在使用前,初始化它
- 确保对象在使用前得到初始化
- 指针使用前初始化
- 确保非局部静态对象在使用前被初始化
- 确定一个对象在使用前已经被初始化
- 确保 objects(对象)在使用前被初始化
- 卡壳:在IMAGELIST可以使用前必须将它初始化
- 确保非局部静态对象在使用前被初始化
- EffictiveC++之确定对象在使用前被初始化
- 确保非局部静态对象在使用前被初始化
- 指针使用前必须初始化
- 在熟练使用2B铅笔前,请不要打开Axure
- 在熟练使用2B铅笔前,请不要打开Axure
- 在熟练使用2B铅笔前,请不要打开Axure
- 在熟练使用2B铅笔前,请不要打开Axure
- 在熟练使用2B铅笔前,请不要打开Axure
- 在熟练使用2B铅笔前,请不要打开Axure
- MFC在WINMAIN前的初始化
- setsockopt的各种使用
- “美丽心灵”纳什诺贝尔经济学奖来之不易
- 一个ID引起的血案
- C#数组
- SQL的详细语法介绍——对于学习数据库最基础知识一
- 请在使用前,初始化它
- juniper ssg5端口映射
- 做到专业?还是再努力些做到职业?
- 关于利用DataSet存取SQL Server中的二进制文件
- 需求分析类文档模板
- Hibernate 多对多的映射关系(many-to-many)
- findWindow的用法(并向记事本插入值)
- iisstate.msi工具 (google翻译)
- 第三代VPN技术演绎长尾理论