`

杜绝“野指针”

阅读更多
据说“野指针”是中国人造的名词,我最初在某论坛中看到,继而找到《高质量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语言杜绝野指针.docx

    杜绝野指针.docx杜绝野指针.docx

    [高质量程序设计指南()].林锐 word版

    - **杜绝野指针**:给出了防止野指针的策略。 - **malloc/free与new/delete**:深入讨论了两者的区别和使用场合。 - **内存耗尽**:提出了处理内存耗尽的应对措施。 **第8章 C++函数的高级特性** - **函数重载**:...

    c/c++编程规划(好的编程风格)

    - **杜绝野指针**:野指针是指指向已释放内存的指针,应避免使用野指针以防止程序崩溃。 - **malloc/free 与 new/delete 的区别**:这两种内存分配机制在语法和使用场景上有所不同,选择合适的方式可以提高程序的...

    高质量C++编程指南

    - **杜绝野指针**:提供预防野指针的方法,防止程序崩溃。 - **MALLOC/FREE与NEW/DELETE的区别**:比较这两种内存分配方式的特点和适用场景。 - **内存耗尽应对措施**:当系统内存不足时,给出相应的处理策略。 - **...

    高质量C++编程

    常见的内存错误需要通过合理的策略来避免,比如杜绝野指针,理解 MALLOC/FREE 和 NEW/DELETE 的不同使用场景及要点。 8. 函数的高级特性:函数重载、成员函数的重载、覆盖与隐藏、参数的缺省值、运算符重载和函数...

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

    - **杜绝野指针**:给出了防止野指针出现的建议。 - **MALLOC/FREE与NEW/DELETE**:探讨了两种内存分配方式的异同。 - **内存耗尽处理**:提供了当系统内存不足时的应对策略。 - **MALLOC/FREE使用要点**:列出了...

    高质量C/C编程指南.pdf

    第7章深入探讨了内存管理,包括内存分配方式、常见内存错误及对策、指针与数组的对比、动态内存的使用和管理、杜绝野指针等问题,这是C/C++编程中最容易出错的地方。 C++函数的高级特性在第8章被讲解,包括函数重载...

    C C++高質量編程(林锐博士对编程的经验之谈)

    7. **杜绝野指针**:采取措施防止野指针的出现,提高程序的稳定性。 8. **MALLOC/FREE与NEW/DELETE**:理解这两种内存分配方式的不同之处及其应用场景。 9. **内存耗尽应对策略**:当系统内存耗尽时,采取有效措施...

    高质量程序设计指南C++-C语言(经典第1版)林锐.pdf

    内存管理是C++/C编程中的难点和重点,书中从内存分配方式、常见的内存错误和对策、指针与数组的对比、动态内存的释放、杜绝野指针、malloc/free与new/delete的区别和使用要点,以及内存耗尽时的处理方案等多方面进行...

    C_C++规范化编程.pdf

    它包括了内存分配方式、常见的内存错误及其对策、指针与数组的对比、内存分配与释放的规范、杜绝野指针、new/delete与malloc/free的区别和使用要点等。 C++函数的高级特性包括函数重载、成员函数的重载、覆盖与隐藏...

    高质量的C编程指南

    - **杜绝野指针**:避免使用未初始化或已释放的指针。 - **MALLOC/FREE与NEW/DELETE**:掌握它们之间的差异及其应用场景。 - **内存耗尽对策**:预先考虑内存不足的情况,并做好异常处理。 #### 八、C++函数高级...

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

    - **杜绝野指针**:提供防止出现野指针的有效方法。 - **MALLOC/FREE与NEW/DELETE区别**:分析这两种内存分配方式的区别及其应用场景。 - **内存耗尽处理**:当内存资源耗尽时的应对策略。 - **MALLOC/FREE使用要点*...

Global site tag (gtag.js) - Google Analytics