`

杜绝“野指针”

阅读更多
据说“野指针”是中国人造的名词,我最初在某论坛中看到,继而找到《高质量C++/C编程指南》。

尔后又见:
“野指针是翻译过来的 AMBITION ,主要是指针未定义或失效,造成指针指向一个未知的空间,会造成潜在隐患。”

下面是前辈们的一些总结:
  “野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为 
  用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。 
  “野指针”的成因主要有两种: 
  (1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如
	char *p =NULL;
	char *str = (char *)malloc(100);


  (2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。参见7.5节。 

  (3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下: 
class A
{
	public void Func(void)
	{
		cout << "Func of class A" << endl;
	}
};  
   
void Test(void)  
{  
	A *p;
	{
		A a;  
        p = &a;         //   注意   a   的生命期  
  	}
  	
  	p->Func();             //   p是“野指针”  

} 

    
函数Test在执行语句p->Func()时,对象a已经消失,而p是指向a的,所以p就成了“野指针”。

---------摘自林锐的《高质量C++编程指南》7.7节,杜绝野指针。  
分享到:
评论

相关推荐

    一个C++内存管理的总结

    C++ 内存管理 chm文档 总结 1:内存分配方式 2、常见的内存错误及其对策 3、指针与数组的对比 4、指针参数是如何传递内存的?...5、杜绝“野指针” 6、有了malloc/free为什么还要new/delete? 7、内存耗尽怎么办?

    高质量C++/C编程指南

    7.7 杜绝“野指针” 51 7.8 有了MALLOC/FREE为什么还要NEW/DELETE ? 52 7.9 内存耗尽怎么办? 53 7.10 MALLOC/FREE 的使用要点 54 7.11 NEW/DELETE 的使用要点 55 7.12 一些心得体会 56 第8章 C++函数的高级特性 57...

    高质量C C编程指南

    7.7 杜绝“野指针” 7.8 有了MALLOC/FREE为什么还要NEW/DELETE ? 7.9 内存耗尽怎么办? 7.10 MALLOC/FREE 的使用要点 7.11 NEW/DELETE 的使用要点 7.12 一些心得体会 第8章 C++函数的高级特性 8.1 函数重载的概念 ...

    高质量编程C++、C

    7.7 杜绝“野指针” 7.8 有了malloc/free为什么还要new/delete ? 7.9 内存耗尽怎么办? 7.10 malloc/free 的使用要点 7.11 new/delete 的使用要点 7.12 一些心得体会 第8章 C++函数的高级特性 8.1 函数重载...

    高质量C++_C编程指南

    7.7 杜绝“野指针” 7.8 有了MALLOC/FREE 为什么还要NEW/DELETE ? 7.9 内存耗尽怎么办 7.10 MALLOC/FREE 的使用要点 7.11 NEW /DELETE 的使用要点 7.12 一些心得体会 第8 章 C++函数的高级特性 8.1 函数重载的...

    新手必看编程法则C++

    7.7 杜绝“野指针” 7.8 有了malloc/free为什么还要new/delete ? 7.9 内存耗尽怎么办? 7.10 malloc/free 的使用要点 7.11 new/delete 的使用要点 7.12 一些心得体会 第8章 C++函数的高级特性 8.1 函数重载的概念 ...

    提高编程效率的高质量的C~C++编程

    7.7 杜绝“野指针”... 51 7.8 有了malloc/free为什么还要new/delete ?... 52 7.9 内存耗尽怎么办?... 53 7.10 malloc/free 的使用要点... 54 7.11 new/delete 的使用要点... 55 7.12 一些心得体会... 56

    高质量C++编程指南.PDF

    7.7 杜绝“野指针” 7.8 有了malloc/free为什么还要new/delete ? 7.9 内存耗尽怎么办? 7.10 malloc/free 的使用要点 7.11 new/delete 的使用要点 7.12 一些心得体会 第8章 C++函数的高级特性 8.1 函数重载的概念 ...

    C++内存管理.doc

    1.1.6 杜绝“野指针” 1.1.7 有了malloc/free为什么还要new/delete? 1.1.8 内存耗尽怎么办? 1.1.9 malloc/free的使用要点 1.2 C++中的健壮指针和资源管理 1.2.1 第一条规则(RAII) 1.2.2 Smart Pointers 1.2.3 ...

    高质量C、C++编程指南

    7.7 杜绝“野指针” 7.8 有了MALLOC/FREE 为什么还要NEW/DELETE ? 7.9 内存耗尽怎么办? 7.10 MALLOC/FREE 的使用要点 7.11 NEW/DELETE 的使用要点 7.12 一些心得体会 第8 章 C++函数的高级特性 8.1 函数重载的...

    高质量C++、C编程指南.doc )

    7.7 杜绝“野指针” 51 7.8 有了MALLOC/FREE为什么还要NEW/DELETE ? 52 7.9 内存耗尽怎么办? 53 7.10 MALLOC/FREE 的使用要点 54 7.11 NEW/DELETE 的使用要点 55 7.12 一些心得体会 56 第8章 C++函数的高级特性 57...

    高级c语言程序编程思想

    7.7 杜绝“野指针” 51 7.8 有了malloc/free为什么还要new/delete ? 52 7.9 内存耗尽怎么办? 53 7.10 malloc/free 的使用要点 54 7.11 new/delete 的使用要点 55 7.12 一些心得体会 56 第8章 C++函数的高级特性 57...

    高质量C++C编程指南(非扫描高清版)(林锐博士)

    7.7 杜绝“野指针”. 7.8 有了MALLOC/FREE 为什么还要NEW/DELETE ?. 7.9 内存耗尽怎么办?. 7.10 MALLOC/FREE 的使用要点 7.11 NEW/DELETE 的使用要点. 7.12 一些心得体会 第8 章 C++函数的高级特性 8.1 ...

    高质量C/C++编程指南(PDF)

    7.7 杜绝“野指针”. 7.8 有了MALLOC/FREE 为什么还要NEW/DELETE ?. 7.9 内存耗尽怎么办?. 7.10 MALLOC/FREE 的使用要点 7.11 NEW/DELETE 的使用要点. 7.12 一些心得体会 第8 章 C++函数的高级特性 8.1 函数重载的...

    高质量C++编程指南

    7.7 杜绝“野指针” 51 7.8 有了malloc/free为什么还要new/delete ? 52 7.9 内存耗尽怎么办? 53 7.10 malloc/free 的使用要点 54 7.11 new/delete 的使用要点 55 7.12 一些心得体会 56 第8章 C++函数的高级特性 57...

    《高质量C++_C编程指南》

    7.7 杜绝“野指针” 51 7.8 有了MALLOC/FREE为什么还要NEW/DELETE ? 52 7.9 内存耗尽怎么办? 53 7.10 MALLOC/FREE 的使用要点 54 7.11 NEW/DELETE 的使用要点 55 7.12 一些心得体会 56 第8章 C++函数的高级特性 57...

    高质量C++编程指南(林锐).doc

    7.7 杜绝“野指针” 51 7.8 有了MALLOC/FREE为什么还要NEW/DELETE ? 52 7.9 内存耗尽怎么办? 53 7.10 MALLOC/FREE 的使用要点 54 7.11 NEW/DELETE 的使用要点 55 7.12 一些心得体会 56 第8章 C++函数的高级特性 57...

    高质量C++编程指南(林锐著,高清PDF版)

    7.7 杜绝“野指针” 51 7.8 有了MALLOC/FREE为什么还要NEW/DELETE ? 52 7.9 内存耗尽怎么办? 53 7.10 MALLOC/FREE 的使用要点 54 7.11 NEW/DELETE 的使用要点 55 7.12 一些心得体会 56 第8章 C++函数的高级特性 57...

Global site tag (gtag.js) - Google Analytics