C++中空指针和野指针的区别

空指针:

1.概念:指向内存中起始编号为0的空间的指针变量

注:空指针指向的内存是不可以访问的

int *p = NULL; 
*p = 100;     //空指针p解引用会导致运行时程序出错,原因就是
	          // 访问空指针p的操作是非法的 

       上述代码段中定义了一个指针p并将其指向内存中编号为0的一片地址空间,也就意味着指针p为空指针。那么访问其指向内存中的数据的操作就是非法的,原因在于0 ~ 255之间的内存编号是系统占用的,因此不可以访问。上述解引用的操作在编译时是没有问题的,但是在运行时会出错。

2.用途:初始化指针变量 (当我们定义的一个指针变量暂时不知道要指向哪一片内存空间时,可以先把它指向内存编号为0的空间)

野指针:

1.概念:指针变量指向非法的内存空间

 实例如下:

//指针变量p指向内存地址编号为0x1111的空间 
  int *p = (int*)0x1111;
 //访问野指针报错
  cout<<*p<<endl; 

       上述代码中指针变量p指向了内存中地址编号为0x1111的空间,看似没有什么问题,但是这一块地址空间我们并没有申请,相当于让指针变量p随便的指向了内存中的一片空间,这片空间中存的是哪个变量我们一概不知,所以没有权限去访问它,这块地址对我们来说属于非法的空间,所以在访问野指针时程序会出出错。

总结:空指针和野指针都不是我们申请的空间,因此不要去访问。


版权声明:本文为triumph_421原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。