C ++中的悬空指针,空指针,空指针和野生指针

悬空指针

悬空指针是指向已释放(或删除)的内存位置的指针。指针有多种悬挂指针的方式

函数调用

当局部变量不是静态的时,指向局部变量的指针将悬空。

int *show(void) {
   int n = 76; /* ... */ return &n;
}

输出结果

Output of this program will be garbage address.

内存分配

int main() {
   float *p = (float *)malloc(sizeof(float));
   //动态内存分配。
   free(p);
   //after calling free()   p becomes a dangling pointer p = NULL;
   //现在,p不再是悬空的指针。
}

变量超出范围

int main() {
   int *p //一些代码// {
      int c; p=&c;
   }
   //一些代码//
   //p在这里悬空指针。
}

空指针

空指针是不与任何数据类型相关联的指针。它指向存储中的某些数据位置,意味着指向变量的地址。也称为通用指针。

它有一些局限性

  • 空指针由于其具体大小而无法进行指针算术运算。

  • 不能用作取消引用。

示例

#include<stdlib.h>
#include<iostream>
using namespace std;
int main() {
   int a = 7;
   float b = 7.6;
   void *p;
   p = &a;
   cout<<*( (int*) p)<<endl ;
   p = &b;
   cout<< *( (float*) p) ;
   return 0;
}

输出结果

7
7.600000

算法

Begin
    用整数值初始化变量 a,用浮点值初始化变量 b。
    声明一个无效指针 p。
    (int *) p = 空洞的类型转换。
    P = & b 表示空指针 p 现在是浮点数。
    (float *) p = 空洞的类型转换。
    打印值。
End.

空指针

空指针是不指向任何内容的指针。

空指针的一些用法是

  • 在尚未为该指针变量分配任何有效内存地址时初始化该指针变量。

  • 如果我们不想传递任何有效的内存地址,则将null指针传递给函数参数。

  • 在访问任何指针变量之前检查空指针。这样,我们就可以在与指针相关的代码中执行错误处理,例如,仅当其不为NULL时才取消引用指针变量。

示例

#include <iostream>
using namespace std;
int main() {
   int *p= NULL; //initialize the pointer as null.
   cout<<"The value of pointer is ";
   cout<<p;
   return 0;
}

输出结果

The value of pointer is 0.

野指针

通配指针是指向任意内存位置的指针。(甚至不是NULL)

int main() {
   int *ptr; //wild pointer
   *ptr = 5;
}