码迷,mamicode.com
首页 > 其他好文 > 详细

空指针、迷途指针、野指针

时间:2014-08-31 15:45:31      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:blog   http   使用   2014   问题   log   sp   new   c   

1、野指针: 声明一个指针(例如 int *p;),编译器会随机分配一个内存地址给它,但是,此地址不可用(如 cout<<p; 此句会出现运行时错误,见图1,但是编译会通过)。当然,在声明时初始化才是好习惯(如 int *p = NULL;),这也是避免野指针的方法。

2、迷途指针: int *p = new int; delete p; 此时的p指针就是一个迷途指针。执行new操作时,编译器开辟一段内存给p指针专用,当delete后,此段内存由编译器收回,并且此段内存可以分配给其它对象使用。此时的问题就是,p指针还可以操作此段内存,原因就是没有修改p指针的指向。迷途指针很危险,造成系统崩溃是好的局面,严重的问题是会出现逻辑错误而我们却无法找到原因。避免迷途指针的方法就是在delete之后加一句:p = NULL;

 

Note:有一种观点,野指针和迷途指针是同一种说法,目前先不做深究,此处只是说明存在这两种不同类型的指针。

 

3、空指针: int *p = NULL; 或者 int *p = 0; 这就是空指针。编译器给指针p分配了确定的内存地址,同时保证此地址不是其它任何对象的地址,我们可以获取此地址值,但是无法使用此地址空间。(如 *p = 3; 会出现运行时错误,见图2 )

 

bubuko.com,布布扣     bubuko.com,布布扣

     

空指针、迷途指针、野指针

标签:blog   http   使用   2014   问题   log   sp   new   c   

原文地址:http://www.cnblogs.com/thinknothing/p/3947720.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!