如何避免野指针

C语言 码拜 10年前 (2015-05-11) 1295次浏览 0个评论

指针主要由下面两种原因导致的。
1)指针变量没有被初始化。指针变量在定义后如果没有初始化是野指针,其值不为NULL;
2)指针 p 被 free 或者 delete 之后,没有置为 NULL;
因此,对症下药,在编程过程上遵循如下原则:
1)凡是定义的指针变量初始化为NULL;
2)指针 p 被 free 或者 delete 之后将其值赋为NULL;
这样对不对啊。
还有就是 文件指针 FILE *fp = NULL;   分配的内存是静态内存 静态内存不是不用我们fp+null  用完之后 关闭 fclose(fp); 要不要加fp=NULL;
有人说加上可以防止野指针? 怎么回事。

用智能指针。
如何避免寄信时被“查无此人”退回?
10分
请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。

意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。

试对比
图书馆(对图书的分类够结构化了吧)

搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索)
哪个处理信息更方便、更高效。

所以
与其费劲去重构代码让其看上去更简洁、更合理
不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。

结构越复杂,越难修改,越难除错。
有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。

程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George

10分
fclose(f);   
//之后,f的值仍是原值,没有清零。故,
f=NULL;
若再次使用f,编译器就会提示错误。
20分
一般fclose后,此文件已经不再使用。用户有责任维护自己代码的安全性。置空与否,看其他地方是否重复使用,识情况而定!
指针初始化 p = NULL;
用完之后 p = NULL;

指针用之前需测试其有效性,如:
if(p != NULL)
{
  //…
}

这是都是简单的编码问题,提高下编码的认真度,可以省掉很多这样的冗余代码。
1、定义的时候就立即赋值
2、不需要的时候,立即置空=NULL
3、尽量压缩生命周期,可以利用do while(0)等屏蔽后面不需要的变量

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明如何避免野指针
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!