迷途指针也叫悬浮指针、失控指针。是当对一个指针进行delete操作而又没有把它设置为空时产生的。如果没有重新给它赋值就直接使用它,会引起不可预料的严重后果。
在下边这段代码中,就产生了一个迷途指针,这是因为delete操作会释放掉指针指向的内存但是不会把指针本身消除掉。这样指针原来指向的对象不存在了,但它仍然指向原来的内存区域,而该区域很可能已经被分配给了其他数据,这样就会出现问题。
int *p = new int[10];
cin>>p;
delete []p; //p变为迷途指针
避免迷途指针的方法有两种:
- 在delete操作之后,直接把指针赋为NULL;
int *p = new int[10]; cin>>p; delete []p; //p变为迷途指针 p = NULL;
- 使用智能指针。