指针类型学习总结--迷途指针
2015-12-04 14:31
302 查看
December 4, 2015 2:28 PM
上一节总结了指针类型,对一些常见以及不常见的指针类型进行了区分,这一节,介绍一下迷途指针。
迷途指针又叫失控指针或悬浮指针,是当对一个指针被执行delete,这时会释放放它所指向的内存,但是你并没有把它设置成空时产生的,如果你没有重新赋值,就试图在进行使用此指针。如果是这样的,引发的后果将是不可想象的,也是不可预料的。
运行结果为:
可见,尽管使用delete将pInt指针删除,并重新声明一个新的指针pLong,但是它们都指向一个相同的地址,即pInt仍然指向这块内存区域。程序把68赋值给pLong后,,当把20赋值给迷途指针pInt时,也就是把20赋值给pInt所指向的内存区域,也是pLong所指向的内存。因此,打印的结果变成了20。
通常,如果在删除一个指针后又把它删除一次,程序就会变得非常不稳定,任何情况都有可能发生。但是如果你只是删除了一个空指针,则什么事情都不会发生,这样做非常安全。所以,大部分情况下,我们应该把迷途指针该为空指针,即:pInt = NULL或者pInt = 0;
尽管使用迷途指针或空指针是非法的,也容易引起程序崩溃,但是空指针导致的程序崩溃是一种可预料的崩溃,这样调试起来就方便得多。
上一节 指针类型学习总结(函数指针、数组指针和指针数组)
上一节总结了指针类型,对一些常见以及不常见的指针类型进行了区分,这一节,介绍一下迷途指针。
迷途指针又叫失控指针或悬浮指针,是当对一个指针被执行delete,这时会释放放它所指向的内存,但是你并没有把它设置成空时产生的,如果你没有重新赋值,就试图在进行使用此指针。如果是这样的,引发的后果将是不可想象的,也是不可预料的。
#include <iostream> using namespace std; int main() { int* pInt = 0; pInt = new int; *pInt = 38; cout<<"*pInt = "<<*pInt<<endl; delete pInt;//pInt成为为一个迷途指针! long *pLong = new long; *pLong = 68; cout<<"*pLong = "<<*pLong<<endl; *pInt=20; //再次使用pInt! cout<<"*pInt = "<<*pInt<<endl; cout<<"*pLong = "<<*pLong<<endl; delete pLong; return 0; }
运行结果为:
*pInt = 38 *pLong = 68 *pInt = 20 *pLong = 20
可见,尽管使用delete将pInt指针删除,并重新声明一个新的指针pLong,但是它们都指向一个相同的地址,即pInt仍然指向这块内存区域。程序把68赋值给pLong后,,当把20赋值给迷途指针pInt时,也就是把20赋值给pInt所指向的内存区域,也是pLong所指向的内存。因此,打印的结果变成了20。
通常,如果在删除一个指针后又把它删除一次,程序就会变得非常不稳定,任何情况都有可能发生。但是如果你只是删除了一个空指针,则什么事情都不会发生,这样做非常安全。所以,大部分情况下,我们应该把迷途指针该为空指针,即:pInt = NULL或者pInt = 0;
尽管使用迷途指针或空指针是非法的,也容易引起程序崩溃,但是空指针导致的程序崩溃是一种可预料的崩溃,这样调试起来就方便得多。
上一节 指针类型学习总结(函数指针、数组指针和指针数组)
相关文章推荐
- 转:Android中的复制粘贴
- 博君一笑:在ARC中如何强制释放某一个NSObject?
- 10006---jQuery事件
- git merge fast-forward squash no-ff
- textField中只能输入数字
- online_judge_1013
- 【算法】递归(recursion)+经典例题个人分析
- 《图像局部不变性特征与描述》阅读笔记(3)-- 点与边缘检测
- Java 大作业回忆--day02-- PC端的初次尝试
- poj 1679 The Unique MST
- 【剑指offer】之丑数
- 微软算法100题58 从尾到头输出链表(java)
- Freemaker的了解
- How browsers work
- Flume 核心组件介绍
- 删除7天前文件
- JDK安装完成后,配置完环境变量还是会出现javac不是内部命令
- epoll + 线程池 回应服务器(Linux) ---可以支持上万个连接
- 放弃Layer
- opencv源码解析之(6):hog源码分析