- 浏览: 438901 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 775- (BOOL)floatA:(float)f1 equalB ... -
C++序列化
2012-07-12 09:51 533http://hi.baidu.com/ewook/item/ ... -
C++著名内裤
2011-12-02 14:00 7691、C++各大有名库的介绍 ... -
C++写C
2011-09-06 17:23 585在C++中写C,标准头文件写法 #ifndef __AB ... -
errno.h
2011-05-05 14:27 647#define EPERM 1 ... -
__cplusplus
2011-04-21 15:09 702http://www.cnblogs.com/stonecra ... -
Pthread__常用
2011-04-21 11:46 807http://blogold.chinaunix.net/u/ ... -
常用预编译
2011-04-21 10:32 610#if defined(WIN32) || defined ... -
C++__容器
2011-04-18 10:16 519http://apps.hi.baidu.com/share/ ... -
C++模板
2011-03-29 14:27 594内容主要来至《钱能C++程序设计教程》&《C++ Pr ... -
交叉引用、前置声明
2011-03-02 09:40 767有两个类相互引用了,编译器报错。 原因是两个类交叉引用: A ... -
typedef的四个用途和两个陷阱
2010-12-14 12:34 608http://hi.baidu.com/changfeng01 ... -
第五届开源小组招新题目
2010-12-03 21:56 701这是学校的开源小组招新题。 08年时我是第二届的组长,不知不觉 ... -
string const char*
2010-12-02 16:13 733http://topic.csdn.net/u/2008092 ... -
CPP Container
2010-11-10 09:20 646延后整理。。。 -
C语言运算符优先级
2010-11-02 17:45 740优先级 运算符 ... -
point point
2010-11-02 17:23 580http://learn.akae.cn/media/ch23 ... -
位运算
2010-11-01 11:33 747千百年来,位运算始终没出现在我写的代码里,今天终于出现了。 ... -
Unix环境下操作特大文件
2010-11-01 11:03 567http://hi.baidu.com/jiangfeng11 ... -
GCC在C语言中内嵌汇编
2010-10-22 14:48 1331http://hi.baidu.com/liu_bin0101 ...
相关推荐
C++ 内存管理 chm文档 总结 1:内存分配方式 2、常见的内存错误及其对策 3、指针与数组的对比 4、指针参数是如何传递内存的?...5、杜绝“野指针” 6、有了malloc/free为什么还要new/delete? 7、内存耗尽怎么办?
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...
7.7 杜绝“野指针” 7.8 有了MALLOC/FREE为什么还要NEW/DELETE ? 7.9 内存耗尽怎么办? 7.10 MALLOC/FREE 的使用要点 7.11 NEW/DELETE 的使用要点 7.12 一些心得体会 第8章 C++函数的高级特性 8.1 函数重载的概念 ...
7.7 杜绝“野指针” 7.8 有了malloc/free为什么还要new/delete ? 7.9 内存耗尽怎么办? 7.10 malloc/free 的使用要点 7.11 new/delete 的使用要点 7.12 一些心得体会 第8章 C++函数的高级特性 8.1 函数重载...
7.7 杜绝“野指针” 7.8 有了MALLOC/FREE 为什么还要NEW/DELETE ? 7.9 内存耗尽怎么办 7.10 MALLOC/FREE 的使用要点 7.11 NEW /DELETE 的使用要点 7.12 一些心得体会 第8 章 C++函数的高级特性 8.1 函数重载的...
7.7 杜绝“野指针” 7.8 有了malloc/free为什么还要new/delete ? 7.9 内存耗尽怎么办? 7.10 malloc/free 的使用要点 7.11 new/delete 的使用要点 7.12 一些心得体会 第8章 C++函数的高级特性 8.1 函数重载的概念 ...
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
7.7 杜绝“野指针” 7.8 有了malloc/free为什么还要new/delete ? 7.9 内存耗尽怎么办? 7.10 malloc/free 的使用要点 7.11 new/delete 的使用要点 7.12 一些心得体会 第8章 C++函数的高级特性 8.1 函数重载的概念 ...
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 ...
7.7 杜绝“野指针” 7.8 有了MALLOC/FREE 为什么还要NEW/DELETE ? 7.9 内存耗尽怎么办? 7.10 MALLOC/FREE 的使用要点 7.11 NEW/DELETE 的使用要点 7.12 一些心得体会 第8 章 C++函数的高级特性 8.1 函数重载的...
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...
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...
7.7 杜绝“野指针”. 7.8 有了MALLOC/FREE 为什么还要NEW/DELETE ?. 7.9 内存耗尽怎么办?. 7.10 MALLOC/FREE 的使用要点 7.11 NEW/DELETE 的使用要点. 7.12 一些心得体会 第8 章 C++函数的高级特性 8.1 ...
7.7 杜绝“野指针”. 7.8 有了MALLOC/FREE 为什么还要NEW/DELETE ?. 7.9 内存耗尽怎么办?. 7.10 MALLOC/FREE 的使用要点 7.11 NEW/DELETE 的使用要点. 7.12 一些心得体会 第8 章 C++函数的高级特性 8.1 函数重载的...
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...
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...
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...
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...