C++基础---失控指针、迷途指针、野指针、悬浮指针及空指针
2017-11-14 10:34
411 查看
1. 失控指针、迷途指针、野指针、悬浮指针及空指针
1.1 失控指针
失控指针:也称迷途指针、野指针、悬浮指针。失控指针:指的是不指向任何合法的对象的指针,可以指向任何地址,并且对该地址的数值进行修改或删除,可能会造成意想不到的后果。
1.2 迷途指针(悬浮指针)
迷途指针:当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指向已经回收的内存地址,此情况下该指针称为迷途指针。若操作系统将这部分已经释放的内存重新分配给另外一个进程,而原来的程序重新引用现在的迷途指针,则将产生无法预料的后果。因为此时迷途指针所指向的内存现在包含的已经完全是不同的数据。通常来说,若原来的程序继续往迷途指针所指向的内存地址写入数据,这些和原来程序不相关的数据将被损坏,进而导致不可预料的程序错误。
这种类型的程序错误,不容易找到问题的原因,通常会导致段错误(Linux系统中)和一般保护错误(Windows系统中)。如果操作系统的内存分配器将已经被覆盖的数据区域再分配,就可能会影响系统的稳定性。
1.3 野指针
野指针:未被初始化的指针,野指针所导致的错误和迷途指针非常相似,但野指针的问题更容易被发现。
1.4 空指针常量
空指针常量: 一个表示0值的整数常量,NULL作为一个宏定义为一个空指针常量。
1.5 空指针
空指针:就是一个被赋值为0的指针,如果一个 空指针常量 赋给了一个有类型的指针变量,那么这个指针就叫空指针。它不指向任何的对象或者函数。
如:将该指针初始化为0,也即初始化为空指针。 int *p; p = 0; <=>等价于 int *p = 0;1
2
3
4
5
1.6 重踏指针
重踏指针:被释放后的指针不置为空指针,不再指向任何合法的内存,它仍可能指向原来的内存块,此时再定义一个新的指针,两个指针都指向同一块内存。经典重踏指针程序实例:
typedef unsigned short int USHORT; #include <iostream> using namespace std; int main () { USHORT *pInt = new USHORT; *pInt = 10; cout << "pInt:" << pInt << endl; cout << "*pInt:" << *pInt << endl; delete pInt;//释放pInt指针指向的内存空间 pInt = 0;//把这句注释掉,pInt将成为一个失控指针 long *pLong = new long;//pLong指针指向的是pInt原来指向的内存块 *pLong = 90000; cout << "pLong:" << pLong << endl; cout << "*pLong:" << *pLong << endl; *pInt = 20 ; cout << "*pInt:" << *pInt << endl; cout << "*pLong:" << *pLong << endl; delete pLong; return 0 ; } =>把这句pInt = 0;注释掉,发现失控指针的重大问题 pInt:00812FC8 *pInt:10 pLong:00812FC8 *pLong:90000 *pInt:20 *pInt :655561
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
注:指针就是用来保存内存地址的变量,因此定义了一个指针后就要给它赋一个地址,或初始化为空指针。使用delete释放掉指针指向的内存后,不再使用该指针,将其置为空指针。
相关文章推荐
- C++基础---失控指针、迷途指针、野指针、悬浮指针及空指针
- C++之失控指针、迷途指针、野指针、悬浮指针及空指针[转]
- C++基础之指针数组和数组指针(重点是后面的名词)
- C/C++基础知识:函数指针和指针函数的基本概念
- C++基础之函数指针
- C++学习笔记:函数指针语法基础以及函数指针做函数参数的思想剖析
- 【C++】基础知识—引用和指针引用
- cocos2dx C++基础野指针案例(出自自己之手)
- 从Android/Java基础之上学习C/C++语言(2)--C语言基础--指针
- C++指针基础问题
- C++学习基础十七-- 函数指针
- C++基础学习系列第一部分——再议数组与指针
- 【C++基础】 指针&字符串&数组
- Unix/Linux C++应用开发-C++基础概念"数组、指针和字符串"
- 图像处理C++基础 01 ——指针
- 【C++】C++基础:指针__引用__const
- 【C++基础之八】函数指针和回调函数
- c++基础7:指针和引用
- C++基础之引用和指针
- C++基础教程(四)——指针(3)