这里说的没有初始化是指连NULL都没有赋废了问题。
很多时候,一不小心,我们就会犯以下错误:
struct listNode
{
int value;
listNode *next;
};
在后面使用时,我们只使用了
listNode **p;
却并没有进行初始化甚至连p=NULL,或者*p=NULL都没有作。这时候,当别人调用这个函数的时候,尽管做了检查:
if(p == NULL || *p == NULL)
{
.....
}
但几乎我们都知道,这是没用的,因为此时p指向的一个不确定的值,而非NULL(0)!!
显然,后果是严重的。
怎么克服呢?
查看了许多网上的文章,基本都不具备可移植性。如:使用断言,增加一个参数来判断,或者某些编译器会有特定的为这些未初始化的指针赋的初值。。。。
在这个帖子中:http://bbs.csdn.net/topics/30204717
大家讨论得很好。
总结有以下几点:
1、程序设计是协作的工作,可以是接口和接口,也可以是不同的程序员之间。所以可以提出一部分要求给其他接口或编程人员。把精力放在主要的方面。
2、建立一个良好的一个代码规范,来防止这类事情的发生。
3、如果是给第三方提供接口,更要保持接口干净,同时可以注明借口调用条件,这些都是必需的,如果别人调用接口传入非初始化指针,同样那是他的问题。
4、在debug模式下打开visual2008编译器开关
编译器开关功能介绍:http://blog.csdn.net/danxuezx/article/details/5130358
具体在:项目-》属性下。如下图所示:
设置完成,就可以了。
5、当然是内存监测工具和调试了。
就写到这里吧