C++野指针和悬空指针的实现方法

野指针和悬空指针是指针中常见的两个概念,本文详细的介绍了这两种的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

野指针和悬空指针是指针中常见的两个概念,本文结合实例讲解来讲解下。

一、野指针

野指针是指尚未初始化的指针,既不指向合法的内存空间,也没有使用 NULL/nullptr 初始化指针。

来看一个简单例子:

 #include  using namespace std; int main() { int *p;     // 野指针 int *q = NULL; // 非野指针 p = new int(5);  // p 现在不再是野指针 q = new int(10); cout<<"*p = "<<*p<

二、悬空指针

悬空指针是指 指针指向的内存空间已被释放或不再有效。

有三种情况会产生悬空指针,下面结合实例来看一下:

2.1 情况一

释放指针资源后,未再次赋值前。

 #include  using namespace std; int main() { int *p = new int(5); cout<<"*p = "<<*p<

p 指针在被 free 后,成为悬空指针,被 NULL 赋值后不再是悬空指针。

注意:这里 free 掉的是 p 的内存空间,并不是变量 p,结合一个例子看下:

 #include  using namespace std; int main() { int *p = new int(5); cout<<"*p = "<<*p<

2.2 情况二

超出了变量的作用范围。

 #include  using namespace std; int main() { int *p; { int tmp = 10; p = &tmp; } //p 在此处成为悬空指针 return 0; } 

在上述例了中,变量 tmp 的作用范围为最近的一层括号内,在括号外引用便超出了变量的作用范围。

2.3 情况三

指向了函数局部变量。

 #include  using namespace std; int* getVal() { int tmp = 10; return &tmp; } int main() { int *p = getVal(); //悬空指针 cout<<"*p = "<<*p<

在函数 getVal 执行完后,局部变量的内存空间会被释放,而这里 p 指向了函数内的局部变量,p 便成为了悬空指针,可以将 tmp 变为 static 的。

以上就是C++野指针和悬空指针的实现方法的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » C语言