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 )
时间: 2024-10-08 11:13:47