- 浏览: 460426 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (538)
- C/C++ Primer (69)
- Objective-C Primer (102)
- Python Primer (19)
- JavaScript Primer (1)
- Java Primer (37)
- PHP Primer (17)
- 泛 Linux (37)
- Shell Script (21)
- APUE (21)
- UNP__1&2 (19)
- NetWork (7)
- Oracle周边 (38)
- Mysql里边 (6)
- Windows技 (9)
- 简单算法 & 数据结构 (14)
- 设计模式 (6)
- GTK历程 (12)
- 工具使用 (25)
- 杂事 (23)
- 一些概念 (17)
- Web方面 (10)
- myCodeTools (9)
- ^未 竟$ (13)
- 硬件通信 (2)
- Games (1)
最新评论
据说“野指针”是中国人造的名词,我最初在某论坛中看到,继而找到《高质量C++/C编程指南》。
尔后又见:
“野指针是翻译过来的 AMBITION ,主要是指针未定义或失效,造成指针指向一个未知的空间,会造成潜在隐患。”
下面是前辈们的一些总结:
“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为
用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。
“野指针”的成因主要有两种:
(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如
(2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。参见7.5节。
(3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下:
函数Test在执行语句p->Func()时,对象a已经消失,而p是指向a的,所以p就成了“野指针”。
---------摘自林锐的《高质量C++编程指南》7.7节,杜绝野指针。
尔后又见:
“野指针是翻译过来的 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节,杜绝野指针。
发表评论
-
float equal
2013-05-23 18:21 820- (BOOL)floatA:(float)f1 equalB ... -
C++序列化
2012-07-12 09:51 595http://hi.baidu.com/ewook/item/ ... -
C++著名内裤
2011-12-02 14:00 8121、C++各大有名库的介绍 ... -
C++写C
2011-09-06 17:23 654在C++中写C,标准头文件写法 #ifndef __AB ... -
errno.h
2011-05-05 14:27 696#define EPERM 1 ... -
__cplusplus
2011-04-21 15:09 739http://www.cnblogs.com/stonecra ... -
Pthread__常用
2011-04-21 11:46 852http://blogold.chinaunix.net/u/ ... -
常用预编译
2011-04-21 10:32 656#if defined(WIN32) || defined ... -
C++__容器
2011-04-18 10:16 558http://apps.hi.baidu.com/share/ ... -
C++模板
2011-03-29 14:27 625内容主要来至《钱能C++程序设计教程》&《C++ Pr ... -
交叉引用、前置声明
2011-03-02 09:40 804有两个类相互引用了,编译器报错。 原因是两个类交叉引用: A ... -
typedef的四个用途和两个陷阱
2010-12-14 12:34 656http://hi.baidu.com/changfeng01 ... -
第五届开源小组招新题目
2010-12-03 21:56 750这是学校的开源小组招新题。 08年时我是第二届的组长,不知不觉 ... -
string const char*
2010-12-02 16:13 777http://topic.csdn.net/u/2008092 ... -
CPP Container
2010-11-10 09:20 730延后整理。。。 -
C语言运算符优先级
2010-11-02 17:45 789优先级 运算符 ... -
point point
2010-11-02 17:23 623http://learn.akae.cn/media/ch23 ... -
位运算
2010-11-01 11:33 782千百年来,位运算始终没出现在我写的代码里,今天终于出现了。 ... -
Unix环境下操作特大文件
2010-11-01 11:03 617http://hi.baidu.com/jiangfeng11 ... -
GCC在C语言中内嵌汇编
2010-10-22 14:48 1368http://hi.baidu.com/liu_bin0101 ...
相关推荐
杜绝野指针.docx杜绝野指针.docx
- **杜绝野指针**:给出了防止野指针的策略。 - **malloc/free与new/delete**:深入讨论了两者的区别和使用场合。 - **内存耗尽**:提出了处理内存耗尽的应对措施。 **第8章 C++函数的高级特性** - **函数重载**:...
- **杜绝野指针**:野指针是指指向已释放内存的指针,应避免使用野指针以防止程序崩溃。 - **malloc/free 与 new/delete 的区别**:这两种内存分配机制在语法和使用场景上有所不同,选择合适的方式可以提高程序的...
- **杜绝野指针**:提供预防野指针的方法,防止程序崩溃。 - **MALLOC/FREE与NEW/DELETE的区别**:比较这两种内存分配方式的特点和适用场景。 - **内存耗尽应对措施**:当系统内存不足时,给出相应的处理策略。 - **...
常见的内存错误需要通过合理的策略来避免,比如杜绝野指针,理解 MALLOC/FREE 和 NEW/DELETE 的不同使用场景及要点。 8. 函数的高级特性:函数重载、成员函数的重载、覆盖与隐藏、参数的缺省值、运算符重载和函数...
- **杜绝野指针**:给出了防止野指针出现的建议。 - **MALLOC/FREE与NEW/DELETE**:探讨了两种内存分配方式的异同。 - **内存耗尽处理**:提供了当系统内存不足时的应对策略。 - **MALLOC/FREE使用要点**:列出了...
第7章深入探讨了内存管理,包括内存分配方式、常见内存错误及对策、指针与数组的对比、动态内存的使用和管理、杜绝野指针等问题,这是C/C++编程中最容易出错的地方。 C++函数的高级特性在第8章被讲解,包括函数重载...
7. **杜绝野指针**:采取措施防止野指针的出现,提高程序的稳定性。 8. **MALLOC/FREE与NEW/DELETE**:理解这两种内存分配方式的不同之处及其应用场景。 9. **内存耗尽应对策略**:当系统内存耗尽时,采取有效措施...
内存管理是C++/C编程中的难点和重点,书中从内存分配方式、常见的内存错误和对策、指针与数组的对比、动态内存的释放、杜绝野指针、malloc/free与new/delete的区别和使用要点,以及内存耗尽时的处理方案等多方面进行...
它包括了内存分配方式、常见的内存错误及其对策、指针与数组的对比、内存分配与释放的规范、杜绝野指针、new/delete与malloc/free的区别和使用要点等。 C++函数的高级特性包括函数重载、成员函数的重载、覆盖与隐藏...
- **杜绝野指针**:避免使用未初始化或已释放的指针。 - **MALLOC/FREE与NEW/DELETE**:掌握它们之间的差异及其应用场景。 - **内存耗尽对策**:预先考虑内存不足的情况,并做好异常处理。 #### 八、C++函数高级...
- **杜绝野指针**:提供防止出现野指针的有效方法。 - **MALLOC/FREE与NEW/DELETE区别**:分析这两种内存分配方式的区别及其应用场景。 - **内存耗尽处理**:当内存资源耗尽时的应对策略。 - **MALLOC/FREE使用要点*...